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


Оператор индекса: []

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++

Операторы C++, приоритет и ассоциативность

Массивы (C++)

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

Одномерные массивы

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