Einzelnen Beitrag anzeigen

paul.kunig

Registriert seit: 25. Sep 2017
42 Beiträge
 
Delphi 10.3 Rio
 
#21

AW: Pointeradresse auslesen

  Alt 13. Sep 2019, 12:02
Zuerst einmal Danke für die vielen Antworten.

Jedoch lüftet sich der Schleier nur sehr langsam.

IntToStr(Eingabe^) = Dereferenzierung des Zeigers. Ausgabe des unter der Adresse abgelegten Wertes.

IntToStr(Integer(Eingabe)) // Erwartete Ausgabe
Welche Ausgabe? Es handelt sich um einen Zeiger!

IntToStr(Integer(@Eingabe)) Adresse auf dem Stack.
Warum Adresse des Stacks? Es geht doch um die Adresse des reservierten Speicherplatzes auf dem Heap!

Meines Wissens nach wird der Heap benutzt, wenn größere Datenstrukturen verwendet werden.
Da der Stack in seiner Größe sehr beschränkt ist, weicht man mit Zeigern auf den Heap aus.

Das heißt doch, dass die lokal angelegte Variable lediglich die Adresse des Zeigers, der auf den Heap zeigt, speichert.

Somit müsste man folgende Werte aus der lokalen Variable auslesen können:
1) Adresse der lokalen Variable auf dem Stack
2) Wert der Variable, der in diesem Fall lediglich die Adresse des Zeigers, der auf den Heap zeigt, darstellt.

Ist diese Adresse 4 bzw.8 Byte groß?
Wenn ja, wofür brauchen wir dann den Zeiger, der ja die gleiche Größe hat?

Nach dieser Aufbereitung komme ich zu folgendem Schluss:
IntToStr(Integer(Eingabe))
gibt die eigentliche Adresse des Zeigers auf den Heap zurück, da dies der abgelegte/gespeicherte Wert in der lokalen Variable ist.

IntToStr(Integer(@Eingabe)) als auch
IntToStr(Integer(Addr(Eingabe)))
gibt die Adresse der lokalen Variable zurück, für die im Stack Speicher reserviert wurde, um die Adresse des Zeigers zu speichern.

Dies kommt mir logisch vor, widerspricht aber der bisherigen Dokumentation, in der gesagt wird, dass @ und Addr() die Adresse des Zeigers wiedergeben.
Abschließend sei gesagt, dass nicht näher erläutert ist, welcher Zeiger gemeint ist, da auch die lokale Variable im Hintergrund lediglich ein Zeiger ist.

Gruß und Danke an alle
  Mit Zitat antworten Zitat