Während die typische Form der Array-Indizierung array[index] ist, bieten C und C eine alternative Syntax: Index[Array]. Diese Syntax hat viele Programmierer verwirrt, aber ist sie gemäß den Sprachspezifikationen gültig?
int arr[] = {1, 2, 3}; 2[arr] = 5; // Does this compile? assert(arr[2] == 5); // Does this assertion fail?
Diese Trickfrage basiert auf der kommutativen Natur von Zusatz. Die Operation index[array] wird in *(index array) konvertiert, und da die Addition kommutativ ist, können wir annehmen, dass 2[arr] und arr[2] äquivalent sind. Dies wird jedoch in den Sprachspezifikationen nicht explizit angegeben.
Ja, der Code ist gemäß den C- und C-Spezifikationen gültig.
C99 (6.5.2.1, Absatz 1):
One of the expressions shall have type "pointer to object type", the other expression shall have integer type, and the result has type "type".
C99 (6.5.2.1, Absatz 2):
A postfix expression followed by an expression in square brackets [] is a subscripted designation of an element of an array object. The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))). Because of the conversion rules that apply to the binary + operator, if E1 is an array object (equivalently, a pointer to the initial element of an array object) and E2 is an integer, E1[E2] designates the E2-th element of E1 (counting from zero).
Diese Spezifikationen erfordern nicht, dass die Reihenfolge der Argumente für [] sinnvoll ist. Daher werden beide Zeilen im Code wie erwartet kompiliert und ausgeführt, und die Behauptung wird bestanden.
Das obige ist der detaillierte Inhalt vonIst „index[array]' eine gültige Array-Zugriffssyntax in C und C?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!