Tableaux multidimensionnels (C)
Une expression d'indice peut également avoir plusieurs indices, comme suit :
expression1 [ expression2 ] [ expression3 ] /*...*/ ;
Les expressions d'indice s'associent de gauche à droite. L’expression d’indice la plus à gauche, expression1[ expression2 ]
, est évaluée en premier. L’adresse qui résulte de l’ajout de expression1
et expression2
forme une expression de pointeur. Ensuite, expression3
est ajouté à cette expression de pointeur pour former une nouvelle expression de pointeur, et ainsi de suite jusqu’à ce que la dernière expression d’indice ait été ajoutée. L’opérateur d’indirection (*
) est appliqué après l’évaluation de la dernière expression d’indice, à moins que la valeur de pointeur finale traite un type tableau.
Les expressions avec plusieurs indices font référence à des éléments de « tableaux multidimensionnels ». Un tableau multidimensionnel est un tableau dont les éléments sont des tableaux. Par exemple, le premier élément d'un tableau tridimensionnel est un tableau à deux dimensions.
Exemples
Pour les exemples suivants, un tableau nommé prop
est déclaré avec trois éléments, dont chacun est un tableau 4-par-6 de valeurs int
.
int prop[3][4][6];
int i, *ip, (*ipp)[6];
Une référence au tableau prop
ressemble à ceci :
i = prop[0][0][1];
L’exemple montre comment faire référence au deuxième élément int
individuel de prop
. Les tableaux sont stockés par ligne, le dernier indice variant ainsi plus rapidement. L'expression prop[0][0][2]
fait référence à l'élément suivant (le troisième), et ainsi de suite.
i = prop[2][1][3];
Cette instruction est une référence plus complexe à un élément de prop
individuel. L'expression est évaluée de la manière suivante :
Le premier indice,
2
, est multiplié par la taille d'un tableau de 4 par 6int
et ajouté à la valeur de pointeurprop
. Le résultat pointe vers le tableau de 4 par 6 deprop
.Le deuxième indice,
1
, est multiplié par la taille du tableauint
de 6 éléments et ajouté à l'adresse représentée parprop[2]
.Chaque élément du tableau de 6 éléments est une valeur
int
. Donc, l’indice final,3
, est multiplié par la taille d’unint
avant d’être ajouté àprop[2][1]
. Le pointeur résultant traite le quatrième élément du tableau de 6 éléments.L'opérateur d'indirection est appliqué à la valeur du pointeur. Le résultat est l'élément
int
à cette adresse.
Les deux exemples suivants présentent des cas où l’opérateur d’indirection n’est pas appliqué.
ip = prop[2][1];
ipp = prop[2];
Dans la première de ces instructions, l’expression prop[2][1]
est une référence valide au tableau tridimensionnel prop
. Elle fait référence à un tableau de 6 éléments (déclaré précédemment). La valeur de pointeur adressant un tableau, l’opérateur d’indirection n’est pas appliqué.
De même, le résultat de l'expression prop[2]
dans la deuxième instruction ipp = prop[2];
est une valeur de pointeur adressant un tableau à deux dimensions.