Condividi tramite


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

Espressioni in forma suffissa

Operatori C++

Operatori C++, precedenza e associazione

Matrici (C++)

Concetti

Matrici unidimensionali

Matrici multidimensionali (C)