| 

.NET C# Java Javascript Exception

1
In C++ gibt es den verblüffenden (und bekannten) Trick, dass

array[i] == i[array]

gilt. Aber warum? Man kann einen int doch nicht indexieren wie einen Zeiger?
11.09.2009
arpa 21 1
2 Antworten
10
In C (und das wurde unverändert in C++ übernommen, da ja C-Code unter C++ im Prinzip lauffähig bleiben sollte) ist der binäre Operator [] nur eine Abkürzung, sogenannter syntactic sugar, für:

array [i] == *(array + i)


Und die Additation von Pointern und Integern ist kommutativ, also gilt

array [i] == *(array + i) == *(i + array) == i [array];
11.09.2009
pjacobi 1,1k 2 6
pjacobi 1,1k 2 6
1
Perfekte Erklärung :)
Dustin Klein 11.09.2009
1
Aber warum? Man kann einen int doch nicht indexieren wie einen Zeiger?


Wie pjacobi schon richtig erkärt hat, sind
Arrays als Adresskonstanten und
Zeiger als Adressvariablen in C und C++
lediglich "Zahlen".

Die "Indexierung" mit Klammer [ .. ] leitet
ganz einfach sich aus der Konvention - u.a. aus
der Assemblerindexierung ab und kam von
C über C++ bis zu Dir ;-)

Beispiel: Schreibe ein Byte aus dem Register AL
in den Speicher im Segment ES am Offset DI:

MOV BYTE PTR ES:[DI], AL

in C

...
char speicher[] = "hallo";
char *ES = speicher;

char AL = 'H';
int DI = 0;

ES[DI] = AL;
...

Zeiger in C sind demnach nichts anderes
als veränderliche Adresspositionen (Zahlen),
während ein "Array" eben eine unveränder-
liche Adressposition (auch eine Zahl) ist
(grob gesprochen).

Das geht auch ;-)

array[1] == array[1];

ist das selbe wie:

'B'-'A'[ array ] == 0[ array+1 ];


aber das hast Du inzwischen sicher
schon vermutet ;-)

Viele Grüße
11.09.2009
Damengummistiefel 367 1 5

Stelle deine Cplusplus-Frage jetzt!