Zeiger-Adressen Subtraktion
-
Super Vielen Dank für die schnelle Antwort!

Hat funktioniert! *happy bin*
Meine Überlegung war wenn z.b. die Integer Variable die Adresse 122400 hat und die darauffolgende Variable die Adresse 122392 und man subtrahiert diese beiden Adressen miteinander, bekommt man den Bereich der für die erste Variable freigehalten wurde.
Dieser freigehaltene Adressbereich entspricht der Größe des Datentyps!?!
Lg RaptorX
-
Ich glaube nicht. Double hat doch schon 8 bytes, bei deiner Rechnung kommt 2 heraus.
Du sollst wirklich anhand der Adressen auf die Typengröße schließen? Da bin ich überfragt.
MfG
-
Ne bei der Berechnung wird der Adressraum von Integer berechnet und dieser hat meines Wissens 2Byte oder 4Byte??
-
Ich nehme schwer an, dass du auf einem 32-bit System ausführst. Demnach hat int 4 Byte...
MfG
-
Hmm oke magst recht haben!

Aber wie würdet ihr die Aufgabe dann lösen?
Schreiben Sie eine Funktion, die die Größe eines Datentys berechnet. Verwenden Sie ein Vorgehensweise die mittels Adresserhöhung arbeitet!
Jemand ne Idee?
Lg RaptorX
-
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!