Такие массивы описываются по заданному шаблону как обычный массив структур или массив указателей на структуры:
struct student { char name [30]; float sb;
} group [20], /* массив структур */
*pgroup [20], /* массив указателей на структуры */
*pgr=group; /* указатель на массив group */
Доступ к элементам массива может выполняться либо с использованием индекса, либо через указатель-константу (имя массива), либо через указатель-переменную, инициализированную адресом первого элемента массива (именем массива):
group[i].sb=0; /* доступ с использованием индексного выражения */
(*(group+i)).sb=0; /* доступ с использованием адресного выражения */
(group+i)->sb=0; /* использование указателя-константы */
(pgr+i)->sb=0; /* использование указателя-переменной */
pgroup [i] = group+i; /* запись адреса структуры в массив указателей */
Продвижение указателя операцией ++ или – – (например, pgr++; pgr– –;) увеличивает или уменьшает его на размер структуры, например, sizeof (struct student), то есть устанавливает на следующий или предыдущий элемент массива. Это удобно при последовательном доступе к элементам массива в цикле.