Объявления массивов
"Объявление массива" именует массив и задает тип его элементов. Он также может определять число элементов в массиве. Переменная с типом массива считается указателем на тип элементов массива.
Синтаксис
declaration:
описатели-объявлений список-деклараторов-инициализации необ**;**список-инициализаторов-и-деклараторов:
инициализатор-деклараторсписок-деклараторов-инициализации**,** декларатор-инициализации
инициализатор-декларатор:
декларатордекларатор = инициализатор
declarator:
указатель необ прямой-деклараторпрямой-декларатор:
прямой-декларатор [ константное-выражение необ ]
Поскольку константное-выражение является необязательным, этот синтаксис имеет две формы:
Первая форма определяет переменную массива. Аргумент константное-выражение в квадратных скобках задает число элементов в массиве. константное-выражение, если имеется, должно иметь целочисленный тип и значение больше нуля. Каждый элемент имеет тип, заданный спецификатором-типа, который может быть любым типом, кроме void. Элемент массива не может являться типом функции.
Вторая форма объявляет переменную, которая определена в другом месте. В этом типе пропущено константное-выражение в квадратных скобках, однако не сами скобки. Эту форму можно использовать, только если ранее массив был инициализирован, объявлен в качестве параметра или ссылки на массив, явно определенный в другом месте программы.
В обеих формах прямого-декларатора именует переменную и может изменить тип переменной. Квадратные скобки ([ ]) после прямого-декларатора изменяют декларатор на тип массива.
Квалификаторы типов могут появиться в объявлении объекта типа массивов, но квалификаторы применяются к элементам, а не самому массиву.
Можно объявить массив массивов (многомерный массив), поместив после декларатора массива список константных выражений в квадратных скобках в следующем виде:
type-specifier declarator [constant-expression] [constant-expression] ...
Каждое константное-выражение в квадратных скобках указывает число элементов в определенном измерении: двумерные массивы имеют два выражения в квадратных скобках, трехмерные массивы — три выражения и так далее. Можно опустить первое константное выражение, если ранее массив был инициализирован, объявлен в качестве параметра или ссылки на массив, явно определенный в другом месте программы.
Можно определить массивы указателей на различные типы объектов с помощью сложных деклараторов, как описано в разделе Интерпретация более сложных деклараторов.
Массивы сохраняются по строкам. Например, следующий массив состоит из двух строк по три столбца каждая.
char A[2][3];
Три столбца первой строки сохраняются первыми, за ними следуют три столбца второй строки. Это означает, что последний индекс меняется наиболее быстро.
Для обращения к одиночному элементу массива используется выражение индекса, как описано в разделе Постфиксные операторы.
Примеры
В следующих примерах показаны объявления массивов.
float matrix[10][15];
Двумерный массив с именем matrix имеет 150 элементов, каждый из них имеет тип float.
struct {
float x, y;
} complex[100];
Это объявление массива структур. Этот массив содержит 100 элементов, каждый элемент — это структура, содержащая два члена.
extern char *name[];
Эта инструкция объявляет тип и имя массива указателей на char. Фактическое определение name происходит в другом месте.
Блок, относящийся только к системам Microsoft
Тип целого числа, необходимый для удержания максимального размера массива, — это размер size_t. Определенный в файле заголовка STDDEF.H параметр size_t представляет собой unsigned int с диапазоном от 0x00000000 до 0x7CFFFFFF.
Завершение блока, относящегося только к системам Microsoft