Прочитать на английском

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


Многомерные массивы (C)

Индексное выражение также может иметь несколько индексов, как показано ниже:

expression1 [ expression2 ] [ expression3 ] /*...*/ ;

Индексные выражения связываются в направлении слева направо. Самое левое выражение подстрочного, expression1[ expression2 ]вычисляется первым. Адрес, который приводит к добавлению expression1 и expression2 формированию выражения указателя; затем expression3 добавляется в это выражение указателя, чтобы сформировать новое выражение указателя и т. д., пока не будет добавлено последнее выражение подстрочного. Оператор косвенного обращения (*) применяется после вычисления последнего подстрочного выражения, если окончательное значение указателя не обращается к типу массива.

Выражения с несколькими индексами ссылаются на элементы "многомерных массивов". Многомерный массив — это массив, элементы которого являются массивами. Например, первый элемент трехмерного массива является двумерным массивом.

Примеры

В следующих примерах массив с именем prop объявляется с тремя элементами, каждый из которых представляет собой массив 4x6, содержащий значения типа int.

int prop[3][4][6];
int i, *ip, (*ipp)[6];

Ссылка на массив prop выглядит следующим образом:

i = prop[0][0][1];

В примере показано, как ссылаться на второй отдельный int элемент prop. Массивы хранятся по строкам, поэтому последний индекс изменяется быстрее; выражение prop[0][0][2] ссылается на следующий (третий) элемент массива и т. д.

i = prop[2][1][3];

Этот оператор представляет собой более сложную ссылку на отдельный элемент массива prop. Выражение вычисляется следующим образом.

  1. Первый индекс, 2, умножается на размер массива int 4x6 и добавляется к значению указателя prop. Результат указывает на третий массив 4x6 массива prop.

  2. Второй индекс, 1, умножается на размер 6-элементного массива int и добавляется к адресу, представленному значением prop[2].

  3. Каждый элемент массива 6 элементов является int значением, поэтому окончательный подстрок 3умножается на размер int до его добавления prop[2][1]. Результирующий указатель указывает на четвертый элемент 6-элементного массива.

  4. Оператор косвенного обращения применяется к значению указателя. Результат — элемент int, расположенный по этому адресу.

В следующих двух примерах показаны случаи, когда оператор косвенного обращения не применяется.

ip = prop[2][1];

ipp = prop[2];

В первом из этих операторов выражение prop[2][1] является допустимой ссылкой на трехмерный массив prop; он ссылается на массив 6 элементов (объявленный ранее). Так как значение указателя обращается к массиву, оператор косвенного обращения не применяется.

Аналогично результат выражения prop[2] во втором операторе ipp = prop[2]; представляет значение указателя, указывающее на двумерный массив.

См. также

Subscript Operator (Подстрочный оператор)