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:
Il primo indice,
2
, viene moltiplicato per la dimensione di una matriceint
4x6 e viene aggiunto al valore del puntatoreprop
. I risultato punta alla terza matrice 4x6 diprop
.Il secondo indice,
1
, viene moltiplicato per la dimensione della matriceint
a 6 elementi e viene aggiunto all'indirizzo rappresentato daprop[2]
.Ogni elemento della matrice a 6 elementi è un
int
valore, quindi l'indice finale,3
, viene moltiplicato per le dimensioni di un oggettoint
prima che venga aggiunto aprop[2][1]
. Il puntatore risultante indirizza il quarto elemento della matrice a 6 elementi.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 prop
tridimensionale . 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.