Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
12. Sep 2019
Richtig, da hab ich was durcheinander gebracht.
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
12. Sep 2019
@freimatz:
Ich hab auch anfänglich gedacht, dass das problematisch sein könnte.
Tatsächlich werden mit New(Eingabe) nur 4 Bytes (ich bin bei 32Bit) auf dem Heap reserviert.
Aber: mit Eingabe^ := Edit1.Text; wird nicht einfach die Zeichenkette zu Eingabe^ kopiert, sondern es wird ein neuer String erzeugt. An Eingabe^ steht dann die Adresse des neu erzeugten Strings also 4 Bytes.
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
12. Sep 2019
Wie ich schon in #2 schrieb : Die Adresse des mit New allozierten Speicherbereichs.
Da freimatz "für 64 Bit Compilieren" ins Spiel brachte:
Es wäre besser IntToStr(NativeInt(Eingabe)) zu schreiben, denn unter 64Bit hat ein Pointer 8 Bytes.
Wenn du unter 64Bit Eingabe nach Integer castest kriegst du nur die unteren 4 Bytes der Adresse,
dagegen, wenn du nach NativeInt castest kriegst du unter...
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
12. Sep 2019
@Paul.Kunig:
Ja, in der Signatur steht Delphi 10 Seattle
Aber ganz oben in #1 steht: "Delphi-Version: 5"
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
11. Sep 2019
Zunächst mal:
Wir sprechen über Delpi 5, wenn ich #1 richtig interpretiere, also String = ShortString.
.
Was aber aus #1 nicht hervorgeht.
.
Ja, wenn "Eingabe" als ^String deklariert ist, ist das so.
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
11. Sep 2019
Zu 1) und 2):
Kannst und machst Du doch
1) Den Werte der unter dieser Speicheradresse abgelegt ist. Eingabe^
.
2) Die Adresse wo der Wert abgelegt ist. Eingabe
.
3) Aus welchem Grund sollte die Variable "Eingabe", die ja ein Zeiger ist, erneut eine Speicheradresse bekommen?
Weil Du mit New(Eingabe) diesen Speicherbereich allozierst und die Adresse dieses Speicherbereichs in Eingabe...
Forum: Object-Pascal / Delphi-Language
by Amateurprofi,
11. Sep 2019
Siehe eingefügte Kommentare im Code
var
Eingabe: ^String;
begin
New(Eingabe);
Eingabe^ := Edit1.Text;
ShowMessage(Eingabe^ + #13#10 + // Der Text aus dem Edit nach Eingabe kopierte Text
IntToStr(Integer(Eingabe)) + #13#10 + // Adresse des mit New allozierten Speicherbereichs
IntToStr(Integer(@Eingabe)) + #13#10 + // Adresse der Variablen "Eingabe"