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