массивы

Массив представляет набор однотипных значений. Объявление массива выглядит следующим образом: тип идентификатор [длина_массива].

Имя массива без индексов в Си является указателем на адрес его первого элемента. Таким образом компилятор рассматривает обращение по индексу вида array[2] как ареф.операцию над указателем вида array+2. Имя массива - нестандартный указатель, поэтому менять его адрес нельзя.
// объявление массива
int numbers[4];
 
// инициализация массива при объевлении
int numbers[4] = { 1, 2, 3, 5 }; 
 
// обращение к элементу массива по индексу
printf("numbers[2] = %d", numbers[2]);
 
// нициализация массива без явно указанной длинны
int numbers[] = { 1, 2, 3, 5 };
 
// инициализация не всех элементов массива
int numbers[5] = { 10, 12}; // 10, 12, 0, 0, 0
 
// частичная инициализация не по порядку 
int numbers[5] = { [1]=11, [3] = 13 };
 
// аналогично вышестоящему
int numbers[5] = { 0, 11, 0, 13, 0 };
 
// инициализация при объявлении двумерного массива
int numbers[3][2] = { {1, 2}, {4, 5}, {7, 8} };
размер массива можно задать динамически через переменную или константу, но при динамической установке нельзя при определении инициализировать массив!
int maxSize = 3;
int array[maxSize] = {1, 2, 3}; // Ошибка