Warum ergibt das "c"?
-
wenn ich folgendes Statement ausführe, ergibt das "d". Kann mir wer (im detail) erklären warum?
cout << 3["abcd"];EDIT: Ja, muss natürlich "d" rauskommen, nicht "c". Hab's geändert.
-
Verbuggter Compiler? Eigentlich sollte 'd' rauskommen.
-
"abcd"liegt alsconst char*im Speicher. Also einem Zeiger auf ein einzelnes Zeichen. Mit dem[]-Operator gehst du dann die angegebene Anzahl an Zeichen weiter im Speicher"abcd"[0] gibt dir also das erste Zeichen aus (von der Adresse, wo das "a" liegt 0 Zeichen nach vorne)
"abcd"[2] also das c (zwei Zeichen nach dem a)
im Grunde also nur eine Addition: Speicheradresse + Index.
Und aus dem Mathematikunterricht weiß man ja, dass a + b und b + a identisch sind.
Also geht auch index + Speicheradresse, oder eben 2["abcd"]
-
Ok, also der [] Operator ist kommutativ? Array[index] ist also absolut identisch zu index[Array], richtig?
-
marktwain schrieb:
Ok, also der [] Operator ist kommutativ? Array[index] ist also absolut identisch zu index[Array], richtig?
Laut Standard (Kurzfassung): x[y], wobei eins davon ein Zeigertyp und eins ein Integertyp ist, ergibt *(x+y).
-
Ok, perfekt. Danke.
-
zwutz schrieb:
"abcd"liegt alsconst char*im Speicher."abcd"ist ein Lvalue-Ausdruck vom Typconst char[5].
-
Vorsicht: Die Äquivalenz
a[b] == *(a+b)gilt im Normalfall nicht für überladene Operatoren (z.B. im Zusammenhang mit dem Array-Wrapperstd::tr1::array).