Ich weiß, dass die Frage beantwortet ist, aber ich konnte nicht widerstehen, diese Erklärung mitzuteilen.
Ich erinnere mich an Principles of Compiler design, Nehmen wir an a
ist eine int
Array und Größe der int
beträgt 2 Bytes, & Basisadresse für a
ist 1000.
Wie a[5]
wird funktionieren ->
Base Address of your Array a + (5*size of(data type for array a))
i.e. 1000 + (5*2) = 1010
Así que,
Ähnlich verhält es sich, wenn der c-Code in 3-Adressen-Code zerlegt wird, 5[a]
wird ->
Base Address of your Array a + (size of(data type for array a)*5)
i.e. 1000 + (2*5) = 1010
Im Grunde genommen verweisen also beide Anweisungen auf denselben Speicherplatz und damit auf die gleiche Stelle, a[5] = 5[a]
.
Diese Erklärung ist auch der Grund, warum negative Indizes in Arrays in C funktionieren.
d.h. wenn ich auf a[-5]
wird es mir
Base Address of your Array a + (-5 * size of(data type for array a))
i.e. 1000 + (-5*2) = 990
Sie gibt mir das Objekt an der Position 990 zurück.