При объявлении массива должна быть выделена область памяти, достаточная для хранения всех его элементов последовательно друг за другом.
Массивы объявляются так:
int A[10];
При этом будет выделена память в объеме sizeof(int)*10 байт, а A
— это идентификатор массива, означающий адрес начала выделенной области.
Зарезервированная память для хранения 10 элементов типа int до ее инициализации будет заполнена непредсказуемым мусором. Поэтому элементы массива, как и переменные, нужно перед использованием обязательно инициализировать.
Явно это делается так:
for (i = 0; i < N; i++)
A[i] = i+1;
Если элементов массива немного, то можно инициализировать их прямо при объявлении:
int A[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Если инициализировать только часть элементов, то остальные будут инициализированы нулями:
int A[10] = {1, 2, 3}; //все остальные =0
Допускается не указывать количество элементов, если есть список инициализации:
int A[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
Вопрос
Есть ли ошибка во фрагменте кода:
int A[10];
A[10] = 0;
И да, и нет.
С точки зрения компилятора — ошибки нет. (Может программист этого действительно захотел — откуда ему знать?)
А с точки зрения логики — да, выход за границы массива.