Sdílet prostřednictvím


Operátor dolního indexu:

postfix-expression [ expression ]

Poznámky

Výraz přípony (což může být také primární výraz) následovaný operátorem indexu [] určuje indexování pole.

Další informace o spravovaných polích naleznete v tématu Pole (rozšíření komponent C++).

Obvykle je hodnota určená pomocí postfix-expression hodnotou ukazatele, jako je například identifikátor pole, a expression je celočíselná hodnota (včetně výčtových typů).Stačí však, aby byl jeden z výrazů typ ukazatele na další celočíselný typ.A proto může být celočíselná hodnota na pozici postfix-expression a hodnota ukazatele může být v závorkách ve expression nebo na pozici indexu.Zvažte následující fragment kódu:

   int nArray[5] = { 0, 1, 2, 3, 4 };
   cout << nArray[2] << endl;            // prints "2"
   cout << 2[nArray] << endl;            // prints "2"

V předchozím příkladu je výraz nArray[2] totožný s výrazem 2[nArray].Důvodem je, že výsledek výrazu indexu e1**[** e2 ] je dán vzorcem:

*( (e2) + (e1) )

Adresa vrácená výrazem není e2 bajtů od adresy e1.Místo toho je tato adresa škálována tak, aby vrátila další objekt v poli e2.Příklad:

double aDbl[2];

Adresy aDb[0] a aDb[1] jsou od sebe vzdáleny 8 bajtů, což je velikost objektu typu double.Toto škálování podle typu objektu se v jazyce C++ provádí automaticky a je definováno v tématu Operátory sčítání, kde je popsáno sčítání a odčítání operandů typu ukazatele.

Výraz indexu může mít také více indexů následovně:

expression1 expression2 expression3...

Výrazy indexu přiřazují zleva doprava.Výraz indexu nejvíce vlevo od výrazu expression1**[expression2]** je vyhodnocen jako první.Adresa, která je výsledkem sečtení výrazů expression1 a expression2 tvoří výraz ukazatele, poté je k tomuto výrazu ukazatele přičten výraz expression3, což vytvoří nový výraz ukazatele a tak dále až do přičtení posledního výrazu indexu.Operátor dereference (*) je použit po vyhodnocení posledního výrazu indexu, pokud konečná hodnota ukazatele odkazuje na typ pole.

Výrazy s více indexy odkazují na prvky vícerozměrného pole.Vícerozměrné pole je pole, jehož prvky jsou pole.Například, první prvek trojrozměrného pole je dvourozměrné pole.Následující příklad deklaruje a inicializuje jednoduché dvourozměrné pole znaků:

// 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;
}

Viz také

Referenční dokumentace

Výrazy přípony

Operátory jazyka C++

Operátory C++, priorita a asociativita

Pole (C++)

Koncepty

Jednorozměrná pole

Vícerozměrná pole (C)