Freigeben über


Subscript-Operator: []

postfix-expression [ expression ]

Hinweise

Ein Postfixausdruck (der auch ein primärer Ausdruck sein kann), gefolgt von dem Indexoperator [ ], gibt eine Arrayindizierung an.

Weitere Informationen zu verwalteten Arrays finden Sie unter Arrays (Komponentenerweiterungen für C++).

Normalerweise ist der von postfix-expression dargestellte Wert ein Zeigerwert, z. B. ein Arraybezeichner, und expression ist ein Ganzzahlwert (einschließlich Enumerationstypen). Syntaktisch erforderlich ist allerdings nur, dass einer der Ausdrücke vom Zeigertyp und der andere Ausdruck vom Ganzzahltyp ist. Daher kann der ganzzahlige Wert an der postfix-expression-Position sein, und der Zeigerwert kann in eckigen Klammern an der expression- oder der "Index"-Position sein. Betrachten Sie das folgende Codefragment:

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

Im vorherigen Beispiel ist der Ausdruck nArray[2] identisch mit dem Ausdruck 2[nArray]. Der Grund dafür: Das Ergebnis eines Indexausdrucks e1**[** e2 ] wird angegeben durch:

*( (e2) + (e1) )

Die Adresse, die durch den Ausdruck ausgegeben wird, entspricht nicht e2-Bytes aus der Adresse e1. Stattdessen wird die Adresse skaliert, um das nächste Objekt im Array e2 zu erhalten. Beispiel:

double aDbl[2];

Die Adressen von aDb[0] und aDb[1] sind 8 Bytes auseinander. Dies ist die Größe eines Objekts vom Typ double. Diese Skalierung nach Objekttyp wird von der Programmiersprache C++ automatisch ausgeführt und wird im Thema Additive Operatoren definiert, in dem Addition und Subtraktion von Operanden des Zeigertyps erläutert werden.

Ein indexierte Ausdruck kann auch mehrere Indizes haben, wie folgt:

expression1 [expression2] [expression3]...

indexierte Ausdrücke sind von links nach rechts angeordnet. Der äußerste linke indexierte Ausdruck expression1**[expression2]** wird zuerst ausgewertet. Die Adresse, die sich aus dem Hinzufügen von expression1 und expression2 ergibt, bildet einen Zeigerausdruck. Dann wird expression3 zu diesem Zeigerausdruck hinzugefügt, um einen neuen Zeigerausdruck zu bilden. Dies geht so lange weiter, bis der letzte indexierte Ausdruck hinzugefügt wurde. Der Dereferenzierungsoperator (*) wird angewendet, nachdem der letzte indexierte Ausdruck ausgewertet wird, es sei denn, der letzte Zeigerwert spricht einen Arraytyp an.

Ausdrücke mit mehreren Indizes verweisen auf Elemente aus mehrdimensionalen Arrays. Ein mehrdimensionales Array ist ein Array, dessen Elemente Arrays sind. Beispielsweise ist das erste Element eines dreidimensionalen Arrays ein Array mit zwei Dimensionen. Im folgenden Beispiel wird ein einfaches, zweidimensionales Array aus Zeichen deklariert und initialisiert:

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

Siehe auch

Referenz

Postfixausdrücke

C++-Operatoren

C++-Operatoren, Rangfolge und Assoziativität

Arrays (C++)

Konzepte

Eindimensionale Arrays

Mehrdimensionale Arrays (C)