Zugriff auf Arrays über Index[array] in C und C
In einem Wissenstest, der manchmal von Interviewern gestellt wird, wird der folgende Code präsentiert:
int arr[] = {1, 2, 3}; 2[arr] = 5; // does this line compile? assert(arr[2] == 5); // does this assertion fail?
Es könnte zunächst so aussehen, als ob die Kompilierung des Ausdrucks 2[arr] fehlschlagen sollte, da er scheinbar versucht, ein Array zu indizieren Verwenden einer Ganzzahl als Array-Namen. Diese unerwartete Syntax ist jedoch tatsächlich sowohl in C als auch in C gültig.
Um zu verstehen, warum, schauen wir uns die technischen Details des []-Operators in diesen Sprachen an.
C und C Array-Zugriffssemantik
Gemäß dem C99-Standard (6.5.2.1 Absatz 1) erwartet der []-Operator Argumente in der Form:
Darüber hinaus wird in Absatz 2 desselben Abschnitts erläutert, dass E1[E2] äquivalent ist zu (*((E1) (E2))). Dies weist darauf hin, dass der Ausdruck E1[E2] als Zeigermanipulation interpretiert werden kann:
Entscheidend ist, dass es im Standard keine Anforderung gibt, dass die Reihenfolge der Argumente für [] sinnvoll ist. Daher wird der Ausdruck 2[arr] als äquivalent zu (*((2) (arr))) behandelt.
Daher sind sowohl die Zuweisung als auch die anschließende Behauptung wie erwartet erfolgreich.
Das obige ist der detaillierte Inhalt vonKompiliert und übergibt 2[arr] = 5 die Behauptung in C und C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!