Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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:
Der erste Index
2
wird mit der Größe eines 4-mal-6-int
-Arrays multipliziert und zum Zeigerwertprop
hinzugezählt. Das Ergebnis zeigt auf das dritte 4-mal-6-Array vonprop
.Der zweite Index,
1
, wird um die Größe desint
-Arrays mit 6 Elementen vergrößert und zur Adresse hinzugefügt, die vonprop[2]
dargestellt wird.Jedes Element des Arrays mit 6 Elementen ist ein
int
-Wert, sodass das endgültige Subscript,3
, mit der Größe einesint
multipliziert wird, bevor esprop[2][1]
hinzugefügt wird. Der resultierende Zeiger gibt das vierte Element des Arrays mit 6 Elementen an.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.