::operator new(10)
-
.filmor schrieb:
p[2];entspricht (wenn p ein Zeiger und nicht void* ist)
*(p + 2);, du kannst den []-Operator also ohne Probleme verwenden. Natürlich darfst du dabei nicht auf unallokierten Speicher zugreifen, aber der Compiler bewahrt dich nicht davor, da musst du selber drauf achten.
Genaugenommen entspricht p[ 2 ] einem *( p + 2 * sizeof( p ) )
-
@lolz:
Nein.
-
nein. es wird nicht der abstand in bytes angegeben sondern in einheiten der größe des entsprechenden typs. mit p == int == 4 bytes übernimmt der compiler die stelle *sizeof (p) weswegen man dies auch weglässt und theoretisch auch 2[p] schreiben könnte.
gute frage warum man es so schreibt sicherlich könnte man wenn man es unbedingt byte genau haben will auch ein char array definieren.
-
hmpf schonwieder zu spät

-
lolz schrieb:
Genaugenommen entspricht p[ 2 ] einem *( p + 2 * sizeof( p ) )
falsch.
(char*)(p+2) ist bereits (char*)p+2*sizeof(p)
-
[quote="volkard"]
lolz schrieb:
Genaugenommen entspricht p[ 2 ] einem *( p + 2 * sizeof( p ) )
Aber Deine Formel macht es nicht besser

Die Formel ist tatsächlich etwas irreführend, weil- sie "+" schreibt, wo der Compiler bei einem gegebenen "+" bereits um sizeof(...) im Adressraum weiterginge, aber
- "soviel Bytes weiter" meint.
Ich hätte noch einen ganz anderen Einwand:
eigentlich müsste es "sizeof(*p)" heißen, oder ?Gruß,
Simon2.
-
Weil (char*)p + 2 * sizeof(p) == &p[2] == (p + 2) != (p + 2 * sizeof(p)).
-
Simon2 schrieb:
eigentlich müsste es
"byteposition(p[ 2 ]) entspricht ...genao. statt "byteposition" zu schreiben hab ich auf char* gecastet.
-
mmhh, ist ein pointer nicht immer 4 byte groß?
deswegen funzt auch sowas wie forward deklaration etc.
und genau deswegen stimme ich dem einwand von simon2 zu.
-
ConfusedGuy schrieb:
mmhh, ist ein pointer nicht immer 4 byte groß?
Nö. Auf x86_64 Systemen ist er 8 Byte groß.