Operatore di indice: []
postfix-expression [ expression ]
Note
Un'espressione di forma suffissa (che può anche essere un'espressione primaria) seguita dall'operatore di indice, [ ], specifica l'indicizzazione della matrice.
Per ulteriori informazioni sulle matrici gestite, vedere Matrici (Estensioni del componente C++).
In genere, il valore rappresentato da postfix-expression è un valore di puntatore, ad esempio un identificatore di matrice, mentre expression è un valore integrale (inclusi i tipi enumerati). Tuttavia, l'unica condizione da soddisfare dal punto di vista sintattico è che una delle espressioni sia di tipo puntatore e l'altra di tipo integrale. Pertanto il valore integrale potrebbe essere nella posizione postfix-expression e il valore di puntatore potrebbe essere nelle parentesi quadre nella posizione di expression o dell'indice. Si consideri il frammento di codice riportato di seguito.
int nArray[5] = { 0, 1, 2, 3, 4 };
cout << nArray[2] << endl; // prints "2"
cout << 2[nArray] << endl; // prints "2"
Nell'esempio precedente l'espressione nArray[2] è identica a 2[nArray]. Il motivo è che il risultato di un'espressione di indice e1**[** e2 ] viene ottenuto da:
*( (e2) + (e1) )
L'indirizzo restituito dall'espressione non è e2 byte dall'indirizzo e1. Piuttosto, l'indirizzo è ridimensionato in modo da restituire l'oggetto successivo nella matrice e2. Ad esempio:
double aDbl[2];
Gli indirizzi aDb[0] e aDb[1] sono a 8 byte di distanza (la dimensione di un oggetto di tipo double). Questo ridimensionamento in base al tipo di oggetto viene eseguito automaticamente dal linguaggio C++ ed è trattato nell'argomento Operatori additivi in cui vengono discusse l'aggiunta o l'eliminazione degli operandi del tipo di puntatore.
Un'espressione di indice può inoltre avere più indici, come nel modo seguente:
expression1 [expression2] [expression3]...
Le espressioni di indice sono associate da sinistra a destra. L'espressione di indice più a sinistra, expression1**[expression2], viene valutata per prima. L'indirizzo che deriva dall'aggiunta di expression1 e expression2 forma un'espressione puntatore; quindi expression3 viene aggiunta a quest'espressione puntatore per formare una nuova espressione del puntatore e così via fino a che non viene aggiunta l'espressione di indice. L'operatore di riferimento indiretto (***) viene applicato dopo la valutazione dell'ultima espressione di indice, a meno che il valore del puntatore finale non indirizzi un tipo di matrice.
Le espressioni con più indici fanno riferimento a elementi di "matrici multidimensionali". Una matrice multidimensionale è una matrice i cui elementi sono matrici. Ad esempio, il primo elemento di una matrice tridimensionale è una matrice con due dimensioni. Nell'esempio seguente viene dichiarata e inizializzata una matrice bidimensionale di caratteri semplice:
// 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;
}
Vedere anche
Riferimenti
Operatori C++, precedenza e associazione