Condividi tramite


Matrici multidimensionali (C)

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 risultante dall'aggiunta expression1 e expression2 forma un'espressione puntatore, quindi expression3 viene aggiunto a questa espressione puntatore per formare una nuova espressione puntatore e così via, fino all'aggiunta dell'ultima espressione di indice. L'operatore di riferimento indiretto (*) viene applicato dopo la valutazione dell'ultima espressione pedice, a meno che il valore del puntatore finale non indirizzi un tipo di matrice.

Le espressioni con più pedici 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.

Esempi

Per gli esempi seguenti, una matrice denominata prop viene dichiarata con tre elementi, ognuno dei quali rappresenta una matrice 4x6 di valori int.

int prop[3][4][6];
int i, *ip, (*ipp)[6];

Un riferimento alla matrice prop è analogo al seguente:

i = prop[0][0][1];

Nell'esempio viene illustrato come fare riferimento al secondo int singolo elemento di prop. Le matrici sono archiviate per riga, pertanto l'ultimo indice varia più rapidamente; l'espressione prop[0][0][2] fa riferimento al successivo (terzo) elemento della matrice e così via.

i = prop[2][1][3];

Questa istruzione è un riferimento più complesso a un singolo elemento di prop. L'espressione viene valutata nel modo seguente:

  1. Il primo indice, 2, viene moltiplicato per la dimensione di una matrice int 4x6 e viene aggiunto al valore del puntatore prop. I risultato punta alla terza matrice 4x6 di prop.

  2. Il secondo indice, 1, viene moltiplicato per la dimensione della matrice int a 6 elementi e viene aggiunto all'indirizzo rappresentato da prop[2].

  3. Ogni elemento della matrice a 6 elementi è un int valore, quindi l'indice finale, 3, viene moltiplicato per le dimensioni di un oggetto int prima che venga aggiunto a prop[2][1]. Il puntatore risultante indirizza il quarto elemento della matrice a 6 elementi.

  4. L'operatore di riferimento indiretto è stato applicato al valore del puntatore. Il risultato è l'elemento int a tale indirizzo.

Questi due esempi successivi mostrano i casi in cui l'operatore di riferimento indiretto non viene applicato.

ip = prop[2][1];

ipp = prop[2];

Nella prima di queste istruzioni, l'espressione prop[2][1] è un riferimento valido alla matrice proptridimensionale . Fa riferimento a una matrice a 6 elementi (dichiarata in precedenza). Poiché il valore del puntatore punta a una matrice, l'operatore di riferimento indiretto non viene applicato.

Analogamente, il risultato dell'espressione prop[2] nella seconda istruzione ipp = prop[2]; è un valore del puntatore che indirizza una matrice bidimensionale.

Vedi anche

Operatore di indice inferiore: