was ist besser
-
-
es is ganz egal wie man es schreibt, weil der compiler es sowieso zu
*(foo+x)
übersetzt. deswegen könnte man lustigerweise sogar statt
foo[x] x[foo]
schreiben
(zumindest beim Gnu gcc compiler)
-
@edvoler: Könntest Du das etwas näher erläutern? 32 Bit System. Pointer sind 4 Byte, die Adressen also immer durch 4 Teilbar. Doubles seien auf meinem System 8 Byte lang. Es sei:
foo=4000 und zeigt auf 10 Doubles.Nun möchte ich auf den 2 Double zugreifen:
foo[1] wird zu 8000+2*8=8016Deiner Umformung nach sollte auch dieses gehen:
1[foo] wird zu 1+8000*16
-
--------- schrieb:
Nun möchte ich auf den 2 Double zugreifen:
foo[1] wird zu 8000+2*8=8016foo[1] wird zu *(foo + 1), das ist *(4000 + 8), das ist *4008.
--------- schrieb:
Deiner Umformung nach sollte auch dieses gehen:
1[foo] wird zu 1+8000*161[foo] wird zu *(1 + foo), das ist *(8 + 4000), das ist auch *4008.
-
naja ehrlich gesagt bin ich mir bei double nicht sicher, wüsste aber nicht warums nicht gehen sollte...
aber das stimmt zB.:
int f[100]={}; //normalerweise wirst du zB auf das 5. element so zugreifen: f[5]=... //du kannst es aber auch so machen: 5[f]=...
ja ich war auch sehr verwundert als ich es zum ersten mal gesehen hab.
aber der compiler macht 5[f] bzw. f[5] IMMER zu *(f+5)
und bei additionen kann man ja die summanden vertauschen
*(f+5) = *(5+f)
-
-
nein, eigentlich nicht xD
ist vielleicht compiler-abhängig
-
ja komisch hab das gerade nochmal getestet, hab mir gerade eingebildet mal nen fall gehabt zu haben wo ich ne warnung bekommen hab, ne 0 rein und dann war sie weg...
lg lolo
-
ja egal... xD
aber was ich oben mit dem ausdruck verwandeln gesagt hab stimmt xDD
-
32 Bit System. Pointer sind 4 Byte, die Adressen also immer durch 4 Teilbar.
Diese Logik ist nicht einsichtig.
-
ach ja so war das, keine warnung sondern ein fehler
int *a={}; int *b={0}; int c[]={}; int d[]={0};
denk ich hab mal aus den [] ein * gemacht und dann ging das mit dem {} nicht mehr und dann mußte da ne 0 rein, ja ich hätte dann auch die klammern weg machen können, wollt das nur mal reproduzieren, dachte schon ich seh gespenster
lg lolo
-
Ok, mein letztes Posting war totaler Humbug. Das heißt bei 2[foo] wird die 2 so aufgefasst als wenn sie die Breite des Datentypes von foo hat.
Die Adressen müssen nicht durch 4 teilbar sein, da man zB Pointer in einem Char Array haben kann. knivil hat Recht.
-
--------- schrieb:
Ok, mein letztes Posting war totaler Humbug.
fein da haben wir was gemeinsam wobei deine nicht ganz so schlimm waren wie meine
-
--------- schrieb:
Das heißt bei 2[foo] wird die 2 so aufgefasst als wenn sie die Breite des Datentypes von foo hat.
Nö, die 2 wird so aufgefasst, als wenn sie die Breite eines int's hätte. Du bist nicht zufällig nwp2?
-
µngbd schrieb:
Du bist nicht zufällig nwp2?
ja mei irgend wann treffen sich alle im tal der aussätzigen
-
µngbd schrieb:
Du bist nicht zufällig nwp2?
wo steckt unser malloc-fetischist eigentlich? lange nichts mehr gelesen von ihm.
-
;fricky schrieb:
wo steckt unser malloc-fetischist eigentlich? lange nichts mehr gelesen von ihm.
Ich glaub, der schmollt.