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
Operátory C++, priorita a asociativita