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 Postfixausdruck, gefolgt von einem Ausdruck in eckigen Klammern ( [ ]
), ist eine indizierte Darstellung eines Elements eines Arrayobjekts. Ein Indexausdruck stellt den Wert an der Adresse dar, welche die expression
hinter postfix-expression
positioniert, wenn diese ausgedrückt wird als
postfix-expression
[
expression
]
Normalerweise ist der von postfix-expression
dargestellte Wert ein Zeigerwert, z. B. ein Arraybezeichner, und expression
ist ein Ganzzahlwert. Syntaktisch erforderlich ist allerdings nur, dass einer der Ausdrücke vom Zeigertyp und der andere Ausdruck vom integralen Typ ist. Der integrale Wert kann sich an der postfix-expression
-Position befinden, und der Zeigerwert kann sich in eckigen Klammern an der expression
- (oder „Subscript“-) Position befinden. Beispielsweise ist folgender Code gültig:
// one_dimensional_arrays.c
int sum, *ptr, a[10];
int main() {
ptr = a;
sum = 4[ptr];
}
Subscriptausdrücke werden häufig verwendet, um auf Arrayelemente zu verweisen. Sie können ein Subscript jedoch auf einen beliebigen Zeiger anwenden. Ungeachtet der Reihenfolge der Werte muss expression
in eckige Klammern ( [ ]
) eingeschlossen werden.
Der Indexausdruck wird ausgewertet, indem der Zeigerwert zum ganzzahligen Wert hinzugefügt wird, bevor der Dereferenzierungsoperator (*
) auf das Ergebnis angewandt wird. (Eine Erläuterung des Dereferenzierungsoperators finden Sie unter Dereferenzierungs- und Address-of-Operatoren.) Für ein eindimensionales Array sind die folgenden vier Ausdrücke gleichwertig, vorausgesetzt, dass a
ein Zeiger ist und b
eine ganze Zahl darstellt:
a[b]
*(a + b)
*(b + a)
b[a]
Die Konvertierungsregeln für den Additionsoperator sind unter Additive Operatoren angegeben. Um den integralen Wert in einen Adressoffset zu konvertieren, wird er mit der Länge des Typs multipliziert, der durch den Zeiger adressiert wird.
Nehmen Sie z. B. an, der Bezeichner line
verweist auf ein Array von int
-Werten. Der Indexausdruck line[ i ]
wird mit folgendem Verfahren ausgewertet:
Der Ganzzahlwert
i
wird mit der Zahl der Bytes, die als die Länge einesint
-Elements definiert ist, multipliziert. Der konvertierte Wert voni
stellti
int
-Positionen dar.Dieser konvertierte Wert wird dem ursprünglichen Zeigerwert (
line
) hinzugefügt, um eine Adresse zu erhalten, die umi
int
-Positionen vonline
versetzt ist.Der Dereferenzierungsoperator wird auf die neue Adresse angewendet. Das Ergebnis ist der Wert des Arrayelements an dieser Position (intuitiv
line [ i ]
).
Der Indexausdruck line[0]
stellt den Wert des ersten Elements der Zeile dar, da der Offset der Adresse, die von line
dargestellt wird, 0 ist. Gleichermaßen verweist ein Ausdruck wie line[5]
auf den Elementoffset fünf Positionen ab der Zeile oder auf das sechste Element des Arrays.