Массив – это упорядоченный набор объектов, тип которых совпадает, например, набор целых чисел или символов. В массиве можно хранить множество однотипных объектов без необходимости введения отдельного имени переменной для каждого из них. Массив может быть одномерным или многомерным. Количество измерений и длина каждого из измерений определяет общую длину массива, которая ограничена лишь адресным пространством конкретного компьютера.
Массивы являются производными типами данных, создаваемыми из существующих типов данных.
Массив, как и любой другой объект в языке Си, должен быть объявлен перед тем, как он будет использован:

тип идентификатор[длина измерения 1][длина измерения 2]...[длина измерения n];

В объявлении массива в квадратных скобках после идентификатора (имени массива) указывается длина каждого измерения. Количество измерений массива определяется по числу квадратных скобок в его объявлении.
Индекс массива определяет используемый элемент массива и указывается в квадратных скобках после имени массива. Индекс массива — это целочисленное выражение, значение которого может быть в диапазоне от 0 до значения, равного длине измерения, уменьшенной на 1.
Примечание 1
В языке Си нумерация элементов массива всегда начинается с 0.
Пример 1
сhar id[8];
Это объявление отводит 8 байт для 8-элементного массива символов.
Рис. 1.  Одномерный массив
Пример 2
float price[3];
Это объявление отводит место для 3 вещественных чисел.
Рис. 2.  Одномерный массив
Пример 3
int table[3][3];
Это объявление двумерного массива целых чисел.
Этот массив можно рассматривать как набор из трех 3-элементных массивов целых чисел.
Рис. 3.  Двумерный массив
Аналогично, трехмерный массив val[5][4][3] можно рассматривать как пять массивов размерности 4 на 3.
Обычно строкам и столбцам придается определенный смысл.
Элементы массива хранятся в памяти последовательно. Если первый элемент символьного массива id хранится по адресу 5000, то второй будет храниться по адресу 5001, третий – по адресу 5002 и т.д.
Двумерный массив располагается в памяти построчно: сначала нулевая строка, потом 1 и т.д. Можно сказать, что “последний индекс меняется быстрее других”. Элементы table[3][3] хранятся в следующем порядке:
[0][0], [0][1], [0][2], [1][0], [1][1], [1][2], [2][0], [2][1], [2][2]