1818 Stimmen

Warum ist es bei Arrays so, dass a[5] == 5[a]?

Wie Joel unterstreicht in Stack Overflow-Podcast #34 , in Programmiersprache C (auch bekannt als: K & R), wird diese Eigenschaft von Arrays in C erwähnt: a[5] == 5[a]

Joel sagt, dass es an der Zeigerarithmetik liegt, aber ich verstehe es immer noch nicht. Warum ist a[5] == 5[a] ?

4voto

Samuel Danielson Punkte 4738

Weil es nützlich ist, um verwirrende Verschachtelungen zu vermeiden.

Würden Sie lieber das hier lesen?

array[array[head].next].prev

oder dies:

head[array].next[array].prev

Übrigens hat C++ eine ähnliche kommutative Eigenschaft für Funktionsaufrufe. Anstatt zu schreiben g(f(x)) wie Sie es in C tun müssen, können Sie Mitgliedsfunktionen verwenden, um x.f().g() . Ersetzen Sie f und g durch Nachschlagetabellen und Sie können schreiben g[f[x]] (funktionaler Stil) oder (x[f])[g] (Oop-Stil). Letzteres wird sehr schön mit Structs, die Indizes enthalten: x[xs].y[ys].z[zs] . In der gebräuchlicheren Schreibweise ist das zs[ys[xs[x].y].z] .

3voto

Harsha J K Punkte 141

Dies ist eine Funktion, die nur dank der Sprachunterstützung möglich ist.

Der Compiler interpretiert a[i] como *(a+i) und der Ausdruck 5[a] wertet aus zu *(5+a) . Da die Addition kommutativ ist, ergibt sich, dass beide gleich sind. Daher ergibt der Ausdruck den Wert true .

3voto

bug_29 Punkte 263

Denn C-Compiler konvertieren Array-Notation immer in Zeiger-Notation. a[5] = *(a + 5) también 5[a] = *(5 + a) = *(a + 5) Beide sind also gleich.

2voto

Jayghosh Wankar Punkte 309

In C

 int a[]={10,20,30,40,50};
 int *p=a;
 printf("%d\n",*p++);//output will be 10
 printf("%d\n",*a++);//will give an error

Zeiger p ist eine "Variable", Array-Name a ist eine "Eselsbrücke" oder ein "Synonym", also p++ ist gültig, aber a++ ist ungültig.

a[2] ist gleichbedeutend mit 2[a] denn die interne Operation für beides ist "Zeigerarithmetik", die intern wie folgt berechnet wird *(a+2) ist gleich *(2+a)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X