Массивы существуют в любом современном языке программирования. Массив — это упорядоченная совокупность элементов одного типа, а значит и размера, объединённая одним общим именем. Каждый такой элемент снаружи массива представлен порядковым числом, называемым индексом и доступ к нему осуществляется именно при помощи этого индекса.

Чтобы досконально понять, что такое массив, достаточно провести аналогию со строем солдат. Командующий указывает: «по порядку расcчитайсь!», происходит расчёт и у каждого солдата появляется свой номер (читай, «индекс»), по которому командир может к нему обратится.
Пример: arr[-1] — неверно, arr[10.1] — тоже неверно, arr[11] — верно.
Индексы должны быть представлены целым беззнаковым числом. Любой массив в Си начинается с нулевого элемента.
Внимание! Если мы резервируем память для 12-ти элементов массива, то индекс последнего — 11! Наиболее часто встречающаяся ошибка в программах новичков по моему мнению.
В Си есть жёсткое требование к организации массива: все элементы должны располагаться в памяти по порядку друг возле друга, а имя массива указывает на начало блока памяти, где эти элементы расположены. Любое обращение к элементам массива компилятор в итоге преобразовывает в указатель, т.е. x[i] будет растолковано им как указатель на область x плюс i шагов нужного размера.
Пример: arr[0] == *arr, arr[11] == *(arr + 11 * sizeof(arr)).
Однако, прежде чем начать использовать массив, следует выделить под него нужный объём памяти.