Всем не хворать. Объявил массив из одного элемента, дальше написал полнейший бред: int mass [1]; mass [9] = 5; mass [-5] = 6; mass ['!'] = 707; printf ("%-5d %d %d %d", mass [9], mass [-5], mass [100500], mass ['!']);
Вопрос1) Каким образом я смог изменить значение ячейки массива, которой несуществует? (2-4строки) Вопрос2) Разве можно задавать отрицательный номер массива? (строка 3) Вопрос3) Каким образом программа считала данные с номера массива, которого не существует + более того значение не изменялось (3модификатор принтфа) - если данные 'мусор', прошу указать откуда этот 'мусор' берется.
PS: во время работы проги, ошибок компилятор не выдает.
Здесь ничего удивительного нет. Просто поймите как организована память и её адресация и всё встанет на свои места. А Си не проверяет выход за пределы диапазона массива, так как часто это бесполезная трата времени. Если Вы хотите это делать, то в С++ для этого есть соответствующие классы!
значит так, если mass локальная для функции, то она содержится в стеке. размер стека может быть достаточно большой (порядка 10 кб и больше) , при выходе за массив вы просто записали это число на место другой переменной, возможно, локальной для функции-родителя.
Объявил массив из одного элемента, дальше написал полнейший бред:
int mass [1];
mass [9] = 5;
mass [-5] = 6;
mass ['!'] = 707;
printf ("%-5d %d %d %d", mass [9], mass [-5], mass [100500], mass ['!']);
Вопрос1) Каким образом я смог изменить значение ячейки массива, которой несуществует? (2-4строки)
Вопрос2) Разве можно задавать отрицательный номер массива? (строка 3)
Вопрос3) Каким образом программа считала данные с номера массива, которого не существует + более того значение не изменялось (3модификатор принтфа) - если данные 'мусор', прошу указать откуда этот 'мусор' берется.
PS: во время работы проги, ошибок компилятор не выдает.