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


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

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

Синтаксис

  • 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

См. также

Основные понятия

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