Freigeben über


Mehrdimensionale Arrays (C)

Ein indexierte Ausdruck kann auch mehrere Indizes haben, wie folgt:

expression1 [ expression2 ] [ expression3 ] /*...*/ ;

indexierte Ausdrücke sind von links nach rechts angeordnet. Der äußerste linke Subscriptausdruck (expression1[ expression2 ]) wird zuerst ausgewertet. Die Adresse, die sich aus dem Hinzufügen von expression1 und expression2 ergibt, bildet einen Zeigerausdruck. Dann wird diesem Zeigerausdruck expression3 hinzugefügt, um einen neuen Zeigerausdruck zu bilden. Dies geht so lange weiter, bis der letzte Subscriptausdruck hinzugefügt wurde. Der Dereferenzierungsoperator (*) wird angewendet, nachdem der letzte Subscriptausdruck ausgewertet wurde, es sei denn, der letzte Zeigerwert richtet sich an einen Arraytyp.

Ausdrücke mit mehreren Indizes verweisen auf Elemente in „mehrdimensionalen Arrays“. Ein mehrdimensionales Array ist ein Array, dessen Elemente Arrays sind. Beispielsweise ist das erste Element eines dreidimensionalen Arrays ein Array mit zwei Dimensionen.

Beispiele

Für die folgenden Beispiele wird ein Array mit dem Namen prop mit drei Elementen deklariert, von denen jedes ein 4-mal-6-Array von int-Werten ist.

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

Ein Verweis auf das prop-Array sieht wie folgt aus:

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

Das obige Beispiel zeigt, wie auf das zweite einzelne int-Element von prop verwiesen wird. Arrays werden zeilenweise gespeichert. Daher unterscheidet sich der letzte Index am schnellsten; der Ausdruck prop[0][0][2] verweist auf das nächste (dritte) Element des Arrays usw.

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

Diese Anweisung ist ein komplexerer Verweis auf ein einzelnes Element von prop. Der Ausdruck wird wie folgt ausgewertet:

  1. Der erste Index 2 wird mit der Größe eines 4-mal-6-int-Arrays multipliziert und zum Zeigerwert prop hinzugezählt. Das Ergebnis zeigt auf das dritte 4-mal-6-Array von prop.

  2. Der zweite Index, 1, wird um die Größe des int-Arrays mit 6 Elementen vergrößert und zur Adresse hinzugefügt, die von prop[2] dargestellt wird.

  3. Jedes Element des Arrays mit 6 Elementen ist ein int-Wert, sodass das endgültige Subscript, 3, mit der Größe eines int multipliziert wird, bevor es prop[2][1] hinzugefügt wird. Der resultierende Zeiger gibt das vierte Element des Arrays mit 6 Elementen an.

  4. Der Dereferenzierungsoperator wird auf den Zeigerwert angewendet. Das Ergebnis ist das int-Element an dieser Adresse.

Die beiden folgenden Beispielen zeigen Fälle, in denen der Dereferenzierungsoperator nicht angewendet wurde.

ip = prop[2][1];

ipp = prop[2];

In der ersten dieser Anweisungen ist der Ausdruck prop[2][1] ein gültiger Verweis auf das dreidimensionale Array prop. Er verweist auf ein Array mit 6 Elementen (zuvor deklariert). Da der Zeigerwert ein Array adressiert, wird der Dereferenzierungsoperator nicht angewendet.

Ebenso ist das Ergebnis des Ausdrucks prop[2] in der zweiten Anweisung ipp = prop[2]; ein Zeigerwert für ein zweidimensionales Array.

Siehe auch

Subscript-Operator: