Краткая теоретическая справка и рекомендации по выполнению

Для переменных типа массив в языке Си всегда в качестве индекса используется целое число. Это связано с тем, что переменная типа массив является указателем на начало этого одномерного массива. Аналогично в математике и физике определяется относительная система координат. А индекс – это смещение относительно начала отсчета в этой системе. Причем компилятор языка Си не отслеживает правильность использования индекса. По этой причине при неаккуратном программировании может возникнуть множество проблем, вплоть до «зависания» компьютера, если только операционная система не «отследит» обращение по некорректному адресу.

Самый безобидный вариант некорректного использования индексов приведен в следующем коротком фрагменте программы:

int x; int y[2]; int z;

void main()

{

x=1; z=4;

y[0]=2; y[1]=3; // Корректное обращение к элементам массива

y[-1]=5; y[2]=6; // Некорректное обращение к элементам массива

}

Здесь три глобальные переменные x, y, z расположены друг за другом. Так как они глобальные, то в такой же последовательности они будут располагаться в оперативной памяти. Поэтому присваивание элементу y[–1] значения 5, приведет к изменению переменной x, а изменение элемента y[2] изменит переменную z. На этом же примере легко можно убедиться, что при объявлении переменной типа массив, в квадратных скобках указывается общее количество элементов массива. Если количество элементов переменной типа массив было N, то первый элемент будет с индексом 0, а последний – с индексом (N–1).

Для одномерных массивов также распространена другая форма обращения к отдельному элементу. В записи *(y+1), в соответствии с порядком выполнения операций языка Си, сначала вычисляется адрес размещения переменной в оперативной памяти (y+1), а потом определяется сам элемент с помощью оператора «звездочка» (разыменование). При выполнении лабораторного задания необходимо хотя бы в одном месте использовать обращение к элементу массива через указатель.