Heim > Backend-Entwicklung > C++ > Hauptteil

Ist „index[array]' eine gültige Array-Zugriffssyntax in C und C?

Susan Sarandon
Freigeben: 2024-11-24 21:55:18
Original
262 Leute haben es durchsucht

Is `index[array]` a Valid Array Access Syntax in C and C  ?

Zugriff auf Arrays über Index[array] in C und C

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?

Frage:

int arr[] = {1, 2, 3};
2[arr] = 5; // Does this compile?
assert(arr[2] == 5); // Does this assertion fail?
Nach dem Login kopieren

Erklärung:

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.

Antwort:

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".
Nach dem Login kopieren

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).
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage