Matrici multidimensionali (C)Multidimensional Arrays (C)

Un'espressione di indice può inoltre avere più indici, come nel modo seguente:A subscript expression can also have multiple subscripts, as follows:


expression1  
[  
expression2  
] [  
expression3  
]...  

Le espressioni di indice sono associate da sinistra a destra.Subscript expressions associate from left to right. L'espressione di indice più a sinistra, expression1[expression2], viene valutata per prima.The leftmost subscript expression, expression1[expression2], is evaluated first. L'indirizzo risultante dall'aggiunta di expression1 ed expression2 forma un'espressione puntatore; quindi expression3 viene aggiunta a quest'espressione puntatore per formare una nuova espressione puntatore e così via finché non è stata aggiunta l'ultima espressione di indice.The address that results from adding expression1 and expression2 forms a pointer expression; then expression3 is added to this pointer expression to form a new pointer expression, and so on until the last subscript expression has been added. 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 (vedere gli esempi riportati di seguito).The indirection operator (****) is applied after the last subscripted expression is evaluated, unless the final pointer value addresses an array type (see examples below).

Le espressioni con più indici fanno riferimento agli elementi di "matrici multidimensionali".Expressions with multiple subscripts refer to elements of "multidimensional arrays." Una matrice multidimensionale è una matrice i cui elementi sono matrici.A multidimensional array is an array whose elements are arrays. Ad esempio, il primo elemento di una matrice tridimensionale è una matrice con due dimensioni.For example, the first element of a three-dimensional array is an array with two dimensions.

EsempiExamples

Per gli esempi seguenti, una matrice denominata prop viene dichiarata con tre elementi, ognuno dei quali rappresenta una matrice 4x6 di valori int.For the following examples, an array named prop is declared with three elements, each of which is a 4-by-6 array of int values.

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

Un riferimento alla matrice prop è analogo al seguente:A reference to the prop array looks like this:

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

Nell'esempio su riportato viene mostrato come fare riferimento al secondo elemento int singolo di prop.The example above shows how to refer to the second individual int element of 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.Arrays are stored by row, so the last subscript varies most quickly; the expression prop[0][0][2] refers to the next (third) element of the array, and so on.

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

Questa istruzione è un riferimento più complesso a un singolo elemento di prop.This statement is a more complex reference to an individual element of prop. L'espressione viene valutata nel modo seguente:The expression is evaluated as follows:

  1. Il primo indice, 2, viene moltiplicato per la dimensione di una matrice int 4x6 e viene aggiunto al valore del puntatore prop.The first subscript, 2, is multiplied by the size of a 4-by-6 int array and added to the pointer value prop. I risultato punta alla terza matrice 4x6 di prop.The result points to the third 4-by-6 array of 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].The second subscript, 1, is multiplied by the size of the 6-element int array and added to the address represented by prop[2].

  3. Ogni elemento della matrice a 6 elementi è un valore int, pertanto l'indice finale, 3, viene moltiplicato per la dimensione di int prima di essere aggiunto a prop[2][1].Each element of the 6-element array is an int value, so the final subscript, 3, is multiplied by the size of an int before it is added to prop[2][1]. Il puntatore risultante indirizza il quarto elemento della matrice a 6 elementi.The resulting pointer addresses the fourth element of the 6-element array.

  4. L'operatore di riferimento indiretto è stato applicato al valore del puntatore.The indirection operator is applied to the pointer value. Il risultato è l'elemento int a tale indirizzo.The result is the int element at that address.

    Queste due esempi successivi mostrano casi in cui l'operatore di riferimento indiretto non viene applicato.These next two examples show cases where the indirection operator is not applied.

ip = prop[2][1];  

ipp = prop[2];  

Nella prima di queste istruzioni, l'espressione prop[2][1] è un riferimento valido alla matrice tridimensionale prop; fa riferimento a una matrice a 6 elementi (dichiarata in precedenza).In the first of these statements, the expression prop[2][1] is a valid reference to the three-dimensional array prop; it refers to a 6-element array (declared above). Poiché il valore del puntatore indirizza una matrice, l'operatore di riferimento indiretto non viene applicato.Since the pointer value addresses an array, the indirection operator is not applied.

Analogamente, il risultato dell'espressione prop[2] nella seconda istruzione ipp = prop[2]; è un valore del puntatore che indirizza una matrice bidimensionale.Similarly, the result of the expression prop[2] in the second statement ipp = prop[2]; is a pointer value addressing a two-dimensional array.

Vedere ancheSee Also

Operatore di indice inferiore:Subscript Operator: