Heim > Backend-Entwicklung > C++ > Ist „2[arr]' gleich „arr[2]' in C und C: Ein kommutativer Array-Zugriff?

Ist „2[arr]' gleich „arr[2]' in C und C: Ein kommutativer Array-Zugriff?

Susan Sarandon
Freigeben: 2024-11-25 14:42:11
Original
839 Leute haben es durchsucht

Does `2[arr]` Equal `arr[2]` in C and C  : A Commutative Array Access?

Zugriff auf Arrays über Index [Array] in C und C: Eine kommutative Kuriosität

Die rätselhafte Frage, die Interviewer verwirrt, lautet:

int arr[] = {1, 2, 3};
2[arr] = 5; // Compiles?
assert(arr[2] == 5); // Fails?
Nach dem Login kopieren

Die Intuition legt nahe, dass a[b] in *(a b) und seit der Addition übersetzt wird kommutativ ist, sollte 2[arr] *(2 arr) entsprechen.

Bestätigt der Standard dies?

Tatsächlich befürworten die C- und C-Standards dies Verhalten.

C-Standard (C99):

Abschnitt 6.5.2.1, Absatz 1:

Einer der Ausdrücke muss den Typ „Zeiger auf Objekttyp“ haben, der andere Ausdruck muss den Typ „Integer“ haben und das Ergebnis muss den Typ „Typ“ haben.

Absatz 2 (Hervorhebung hinzugefügt):

Ein Postfix-Ausdruck, gefolgt von einem Ausdruck in eckigen Klammern [], ist eine tiefgestellte Bezeichnung eines Elements eines Array-Objekts. Die Definition des Indexoperators [] ist, dass E1[E2] identisch ist mit (*((E1) (E2))). Aufgrund der Konvertierungsregeln, die für den Binäroperator gelten, bezeichnet E1[E2] das E2-te Element von E1, wenn E1 ein Array-Objekt ist (entspricht einem Zeiger auf das Anfangselement eines Array-Objekts) und E2 eine ganze Zahl ist (von Null an gezählt).

Schlussfolgerung

Der Standard besagt eindeutig, dass E1[E2] ist entspricht *(E1 E2), unabhängig von der Reihenfolge der Argumente. Daher liefert 2[arr] das gleiche Ergebnis wie arr[2], sodass sowohl die Zuweisung als auch die Behauptung erfolgreich sind, ohne die Augenbrauen hochzuziehen.

Das obige ist der detaillierte Inhalt vonIst „2[arr]' gleich „arr[2]' in C und C: Ein kommutativer Array-Zugriff?. 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