Hallo..... Ich habe da ein riesiges prob mit Pointern.... Mit rddouble will ich einen pointer auf "val" im struct params legen. Bei "var" habe ich überhaupt kein problem damit. Bei "val" bekomme ich aber nur jeden 2.ten wert zurückgegeben. Ich hab schon alles mögliche versucht, finde aber keine antwort warum das so ist... hab mir die peinter ausgeben lassen, bekomme es trozdem nicht zum laufen........ Hier erst mal die code Fragmente: struct val { double val; unsigned int var; }val; struct svalue { struct val V1; struct val V2; struct val V3; struct val V4; }svalue; double rddouble(unsigned int index) { double * ptr; //ptr = (double *)¶ms + (index * ((sizeof(val)/2)>>1)); return (double)*ptr; } struct svalue params; achso... mit params.VX.val ausgeben bzw einlesen klappt aber mit nem pointer ?!?! ich versweifel so langsam drann.... für jedliche Hilfe währe ich Dankbar ! mfg fugitivus
Warum nimmst du nicht einfach ein Array?
1 | struct val params[4]; |
2 | |
3 | double rddouble(unsigned int index) { |
4 | |
5 | return params[index].val; |
6 | |
7 | }
|
Und so nebenbei: (sizeof(val)/2)>>1) Was denkst du, was bei diesem Konstrukt rauskommen soll?
1: (sizeof(val)/2)>>1) war der lezte versuch.... das /2 wa halt ne verbesserung... ist eigendlich quatsch... das macht mich ja auch so stutzig... weil teile ich es nicht durch 2 so bekomme ich nur jeden 4.ten wert von "val"..: aso: (sizeof(params)/2)>>1) sry... 2: Also das mit dem array ist ne gute frage eigendlich hätte ich es ja so gemacht.... aber da ich bei allen anderen datentypen als dem double keine probleme habe denke ich das es irgendwie gehen muss... kurz ich will das mit den pointern endlich raffen das macht mich sonst bekloppt.... aber erst mal danke für deine antwort ! mfg fugitivus
Wenn du denn unbedingt auf die Elemente in "struct svalue" über Pointerarithmetik zugreifen willst (*), dann z.B. so:
1 | double rddouble(unsigned int index) { |
2 | |
3 | return ((struct val*)¶ms)[index].val; |
4 | |
5 | }
|
(*) So was ist aber ziemlich Pfui, und funktioniert z.B. auch nur, wenn "struct svalue" keine Padding-Bytes enthält.
> aber wieso ist das pfui ?!? Es ist in C eigentlich verboten. > und was sind padding bytes ?!? http://www.lmgtfy.com/?q=padding+bytes
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.