Einzelnen Beitrag anzeigen

samso

Registriert seit: 29. Mär 2009
439 Beiträge
 
#18

AW: Pointeradresse auslesen

  Alt 12. Sep 2019, 08:52
Das ist völlig irrelevant, ob der Speicherplatz ausreicht. Es ist lediglich ein Test zum Verständnis von Zeigern.
Wenn ich die Speicheradresse eines Zeigers ausgeben will, muss ich wohl in einen Integer casten, da ich einen Zeiger nicht anzeigen kann.

Noch einmal die Frage:
Was gibt IntToStr(Integer(Eingabe)) zurück, wenn, wie in diesem Fall, Eingabe ein Zeiger ist?
Leider hast Du Dir zur Erforschung von Zeigern einen Kandidaten ausgesucht, der die Sache kompliziert macht. Ein String ist bereits eine Zeiger. D.h. ^String ist ein Zeiger auf einen Zeiger. Ich würde vorschlagen, dass Du die Sache vielleicht zunächst mal etwas einfacher gestaltest:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Eingabe: ^Integer; // für die Variable "Eingabe" wird Platz auf dem Stack reserviert
begin
  New(Eingabe); // reserviert Platz für den Integer im Speicher
  Eingabe^ := 123; // der reserviert Platz wird mit einem Wert gefüllt

  ShowMessage(IntToStr(Eingabe^) + #13#10 + // Erwartete Ausgabe "123"
  IntToStr(Integer(Eingabe)) + #13#10 + // Erwartete Ausgabe: Wert des Zeigers auf "123"
  IntToStr(Integer(@Eingabe)) + #13#10 + // Erwartete Ausgabe: Adresse der Variablen "Eingabe" (die Adresse auf dem Stack)
  IntToStr(Integer(Addr(Eingabe))) // wie vorherige Zeile
  );

  Dispose(Eingabe); // gibt den Platz für den Integer wieder frei
end;

Geändert von samso (12. Sep 2019 um 08:56 Uhr)
  Mit Zitat antworten Zitat