Поделиться через


Объявления массивов

"Объявление массива" именует массив и задает тип его элементов. Он также может определять число элементов в массиве. Переменная с типом массива считается указателем на тип элементов массива.

Синтаксис

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-specifierdeclarator [ 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.

Завершение блока, относящегося только к системам Майкрософт

См. также

Деклараторы и объявления переменных