Определение и инициализация массива в С

При объявлении массива должна быть выделена область памяти, достаточная для хранения всех его элементов последовательно друг за другом.

Массивы объявляются так:

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;

Решение

И да, и нет.

С точки зрения компилятора — ошибки нет. (Может программист этого действительно захотел — откуда ему знать?)

А с точки зрения логики — да, выход за границы массива.