Руководство полного чайника по программированию на языке Си


МАССИВЫ - часть 2


Индекс - часть ИМЕНИ ПЕРЕМЕННОЙ.

На самом деле индексация - это 1) выбор элемента в массиве 2) справа от присваиваний и в выражениях - еще и разыменование, то есть взятие вместо имени переменной - значения, в ней хранящегося.

Если в переменную не было занесено значение, а мы используем эту переменную, то в ней лежит МУСОР (любое, непредсказуемое значение).

printf("var4 есть %d\n", var[4]);

напечатает все что угодно.

Поэтому переменные надо всегда инициализировать (давать им начальное значение).

Глобальные переменные автоматически инициализируются нулем, если мы не задали иначе.

Локальные переменные не инициализируются автоматически, и содержат МУСОР.

Массивы НЕЛЬЗЯ присваивать целиком, язык Си этого не умеет.

int a[5]; int b[5];

a = b; /* ошибка */

Также нельзя присвоить значение сразу всем элементам (ячейкам) массива:

a = 0; /* ошибка */

не делает того, что нами ожидалось, а является ошибкой. Для обнуления всех ячеек следует использовать цикл:

int i;

for(i=0; i < 5; i++) /* для каждого i присвоить a[i] = 0; */ a[i] = 0;

СВЯЗЬ МАССИВОВ И ЦИКЛОВ ======================= Вследствие этого массивы приходится копировать (и инициализировать) поэлементно, в цикле перебирая все (или часть) ячейки массива.

int i;

for(i=0; i < 5; i++) a[i] = b[i];

В данном случае индекс цикла служит также и индексом в массиве.

Индексы в массиве идут с НУЛЯ.

Пример инициализации:

int index, array[5];

for(index=0; index < 5; index++) array[index] = index * 2 + 1;

или

int index, array[5];

index = 0; while(index < 5){ array[index] = index * 2 + 1; index++; }

/* В массиве будет: { 1, 3, 5, 7, 9 } */

ИНДЕКС для массивов - номер "ящика/ячейки" в массиве.

для циклов - номер повторения цикла, счетчик. Мы должны изменять его САМИ.

Обычно массивы и циклы совмещаются так: индекс цикла есть индекс в массиве; то есть индекс цикла используется для перебора всех элементов массива:

int a[N], i;

for(i=0; i < N; i++) ...a[i]...

Примеры:

int a[5];




- Начало -  - Назад -  - Вперед -