Оператор индекса: []
postfix-expression [ expression ]
Заметки
Постфиксное выражение (которое может также быть основным выражением), за которым следует оператор индекса, [ ], задает индексирование массива.
Сведения об управляемых массивах см. в разделе массив (Visual C++).
Обычно постфиксное-выражение представляет значение указателя, например идентификатор массива, а выражение является целочисленным значением (включая перечисленные типы). Однако все, что необходимо синтаксически, — это чтобы одно из выражений имело тип указателя, а другие — целочисленный тип. Таким образом, целочисленное значение может находиться в позиции постфиксного-выражения, а значение указателя может находиться в квадратных скобках в позиции выражения или позиции индекса. Рассмотрим следующий фрагмент кода:
int nArray[5] = { 0, 1, 2, 3, 4 };
cout << nArray[2] << endl; // prints "2"
cout << 2[nArray] << endl; // prints "2"
В предыдущем примере выражение nArray[2] совпадает с 2[nArray]. Дело в том, что результат выражения индекса e1**[** e2 ] выдается:
*( (e2) + (e1) )
Адрес, предоставленный этим выражением, не является байтами e2 из адреса e1. Этот адрес масштабируется так, чтобы выдавать следующий объект в массиве e2. Например:
double aDbl[2];
Адреса aDb[0] и aDb[1] различаются 8 байтами — размером объекта типа double. Это масштабирование выполняется автоматически в зависимости от типа объектов в языке C++ и определяется в статьях раздела Операторы добавления, в которых рассматриваются сложение и вычитание операндов типа указателя.
Индексное выражение также может иметь несколько индексов, как показано ниже:
выражение1 [выражение2] [выражение3]...
Индексные выражения связываются в направлении слева направо. Сначала вычисляется левое индексное выражение, выражение1**[выражение2]. Адрес, получающийся в результате сложения выражения1 и выражения2, формирует выражение указателя; затем к этому выражению указателя добавляется выражение выражение3, чтобы образовать новое выражение указателя, и так до тех пор, пока не будет добавлено последнее индексное выражение. После вычисления последнего индексного выражения выполняется оператор косвенного обращения (***), если конечное значение указателя не указывает на тип массива.
Выражения с несколькими индексами ссылаются на элементы многомерных массивов. Многомерный массив — это массив, элементы которого сами являются массивами. Например, первый элемент трехмерного массива является двумерным массивом. В следующем примере объявляется и инициализируется простой двухмерный массив символов.
// expre_Subscript_Operator.cpp
// compile with: /EHsc
#include <iostream>
using namespace std;
#define MAX_ROWS 2
#define MAX_COLS 2
int main() {
char c[ MAX_ROWS ][ MAX_COLS ] = { { 'a', 'b' }, { 'c', 'd' } };
for ( int i = 0; i < MAX_ROWS; i++ )
for ( int j = 0; j < MAX_COLS; j++ )
cout << c[ i ][ j ] << endl;
}
См. также
Ссылки
Операторы C++, приоритет и ассоциативность