Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье
Индексное выражение также может иметь несколько индексов, как показано ниже:
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
. Выражение вычисляется следующим образом.
Первый индекс,
2
, умножается на размер массиваint
4x6 и добавляется к значению указателяprop
. Результат указывает на третий массив 4x6 массиваprop
.Второй индекс,
1
, умножается на размер 6-элементного массиваint
и добавляется к адресу, представленному значениемprop[2]
.Каждый элемент массива 6 элементов является
int
значением, поэтому окончательный подстрок3
умножается на размерint
до его добавленияprop[2][1]
. Результирующий указатель указывает на четвертый элемент 6-элементного массива.Оператор косвенного обращения применяется к значению указателя. Результат — элемент
int
, расположенный по этому адресу.
В следующих двух примерах показаны случаи, когда оператор косвенного обращения не применяется.
ip = prop[2][1];
ipp = prop[2];
В первом из этих операторов выражение prop[2][1]
является допустимой ссылкой на трехмерный массив prop
; он ссылается на массив 6 элементов (объявленный ранее). Так как значение указателя обращается к массиву, оператор косвенного обращения не применяется.
Аналогично результат выражения prop[2]
во втором операторе ipp = prop[2];
представляет значение указателя, указывающее на двумерный массив.
Subscript Operator (Подстрочный оператор)