Forum: Object-Pascal / Delphi-Language
by paul.kunig,
13. Sep 2019
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.
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
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?
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
Wieso weise ich nichts zu?
Der Inhalt(Wert) des Eingabefeldes wird unter der Speicheradresse des Zeigers abgelegt.
@ und Addr() sind laut Delphi für die Ausgabe der Speicheradresse vorgesehen, richtig.
Aber was gibt IntToStr(Integer(Eingabe)) zurück, wenn, wie in diesem Fall, Eingabe ein Zeiger ist?
Ist die Frage so schwer, drücke ich mich falsch aus oder kann ich mein Anliegen nicht klar...
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
Hallo Klaus,
wieso Delphi 5? Wurde nicht von mir eingetragen.
In der Signatur steht doch Delphi 10 Seattle!
Ich habe im ersten Thread die komplette Routine hineingeschrieben.
Daraus geht eindeutig hervor, dass es sich um einen Typisierten Zeiger handelt, der meiner Meinung nach im Heap gespeichert wird.
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
Ich möchte den Wert des Eingabefeldes im Heap speichern, daher der Typisierte Zeiger.
Um den Wert aus dem Speicherbereich auszulesen wird dieser dereferenziert, also Eingabe^.
Um die Speicheradresse auszulesen wird @ oder Addr() verwendet.
So weit, so gut.
Wenn ich den Zeiger nicht mit New() erzeuge, gibt es eine Zugriffsverletzung.
Also ist diese Speicherzuweisung notwendig.
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
Hallo Amateurprofi,
danke für deine Antwort. Noch einmal zum Verständnis.
Die Variable "Eingabe" ist eine Typisierter Zeiger.
In diesen Speicherbereich wird der Wert aus dem Eingabefeld gespeichert.
Also sollte ich zwei Werte abrufen können.
1) Den Werte der unter dieser Speicheradresse abgelegt ist.
2) Die Adresse wo der Wert abgelegt ist.
Forum: Object-Pascal / Delphi-Language
by paul.kunig,
11. Sep 2019
Hallo zusammen,
folgender Code:
procedure TForm1.Button1Click(Sender: TObject);
var
Eingabe: ^String;
begin
New(Eingabe);
Eingabe^ := Edit1.Text;