Zeiger-Adressen Subtraktion
-
Die Aufgabestellung hört sich für mich nach sowas an:
int* a = 0; char* addresse_vorher = (char*)a; a++; char* addresse_nachher = (char*)a; int differenz = addresse_nachher - addresse_vorher;Dabei macht man sich zunutze, dass die Zeiger-Arithmetik auch funktioniert, wenn der Zeiger auf nix vernünftiges (hier 0) zeigt. Man sagt dem Computer, der Zeiger soll auf den nächsten int zeigen, deshalb wird die Adresse um so-und-so-viel erhöht. Die Differenz sollte dann die Größe deines Datentyps in Bytes sein

-
Schlau schlau, wieder was gelernt :xmas1:
MfG
-
Definiere ein Array des Datentypes und rechne i.e. &...[1] - &...[0].
-
Super Badestrand!
Funktioniert mit allen Datentypen hervorragend!
Vielen Dank

Hab leider nur dein Code noch net so ganz verstanden
!Lg RaptorX
-
Also bei der Idee mit dem Array erhalte ich den Wert 1. Scheint also nicht zu gehen!

int array[2]; int ergebnis; ergebnis=&array[1]-&array[0]; printf("Ergebnis:%i",ergebnis);Lg RaptorX
-
RaptorX schrieb:
Also bei der Idee mit dem Array erhalte ich den Wert 1. Scheint also nicht zu gehen!

Die Idee besteht darin, die Adressen nach char* zu casten:
int array[2]; int ergebnis; ergebnis=static_cast<char*>(&array[1])-static_cast<char*>(&array[0]); printf("Ergebnis:%i",ergebnis);
-
Oke sorry Bashar!
Aber soweit ist unser Wissensstand noch net!

Habs jetzt nach der Methode von Badestrand gelöst.

BELIEBIGER_DATENTYP* a = 0; char* addresse_vorher = (char*)a; a++; char* addresse_nachher = (char*)a; ergebnis = addresse_nachher - addresse_vorher;Lg RaptorX
-
Habs jetzt nach der Methode von Badestrand gelöst.

Die Methode von Badestrand stinkt – sorry – weil er C-Style-Casts verwendet. Das ist pfui und das macht man nicht.
Also, statt
(char*)aschreibt man in diesem Fallreinterpret_cast<char*>(a). Das ist schön sperrig und gibt ein visuelles Warnsignal ab. Solche Casts sind nämlich immer mit Vorsicht zu genießen.
-
Habs geändert! Geht ebenfalls bestens

Sry aber mit den casts hab ich noch keine Ahung! Erst Semester halt ;)!

-
Randfrage: Was für ein Problem hast du mit sizeof()?
Btw, deine erste Lösung war undefiniert - Zeiger-Arithmetik liefert nur dann etwas vernünftiges, wenn die beteilitgten Zeiger alle im selben Array unterwegs sind.
-
CStoll schrieb:
Randfrage: Was für ein Problem hast du mit sizeof()?
RaptorX schrieb:
Folgende Aufgabe gilt es zu lösen:
Größe eines Datentypes mittels Adressen zu berechnen!:xmas1:
-
So ist es, auch wenns kein Sinn macht man durfte sizeof() nicht verwenden

Lg RaptorX
:xmas1:
Ich danke euch allen nochmal für die Hilfe!