Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   allgemeine Pointer Frage (https://www.delphipraxis.net/171808-allgemeine-pointer-frage.html)

ATS3788 26. Nov 2012 13:12

allgemeine Pointer Frage
 
Hallo
Ich weiß blöde Überschrift

Ich habe da eine Frage, die wohl Banal ist,
nur mache ich immer und immer wieder den gleichen Fehler.

Delphi-Quellcode:
TBuffer              = array[0..0] of byte;
var
Buffer   : ^TBuffer;
was ist der Unterschied

Delphi-Quellcode:
falsch
Stream.Write(Buffer, counter );

Delphi-Quellcode:
richtig
Stream.Write(Buffer^, counter );
Also das Hochzeichen
Ich weiß was Pointer sind
nur blicke ich nicht wohin die Pointer hier zeigen

DeddyH 26. Nov 2012 13:14

AW: allgemeine Pointer Frage
 
Buffer bezeichnet den Pointer an sich, Buffer^ den Speicherbereich, auf den der Pointer zeigt (also Dein Array).

himitsu 26. Nov 2012 13:25

AW: allgemeine Pointer Frage
 
Wenn man das geziehlt für Klassen, oder einen neuen Klassentypen, optional aktivieren könnte, dann wäre es ja unproblematisch mit alten Codes kompatibel.
Delphi war mal stolz darauf mal sowas von abwärtskompatibel gewesen zu sein.

p80286 26. Nov 2012 13:40

AW: allgemeine Pointer Frage
 
ich hab's mir so gemerkt:
Delphi-Quellcode:
Zeiger:=Adr(variable);
oder
wie Himitsu es ausgeführt hat
Delphi-Quellcode:
Zeiger:=@Variable;
der Zugriff erfolgt dann über
Delphi-Quellcode:
TIrgendeinTyp(Zeiger^)
wichtig ist nur
Delphi-Quellcode:
Zeiger
enthält nur die Adressinformation, der eigentliche Wert ist in
Delphi-Quellcode:
Zeiger^
Gruß
K-H

Jonas Shinaniganz 26. Nov 2012 13:45

AW: allgemeine Pointer Frage
 
Mir stellt sich da spontan die Frage:

http://www.delphi-treff.de/tutorials...tei-speichern/

Wieso ein Typecast auf PChar um dann den Pointer zu dereferenzieren?

Delphi-Quellcode:
Stream.Write(PChar(Daten[I].Name)^, Len);

kann man da nicht einfach
Code:
Daten[I].Name
übergeben?

grüße

DeddyH 26. Nov 2012 13:54

AW: allgemeine Pointer Frage
 
Lies doch einfach mal 3 Sätze weiter :zwinker:

Jonas Shinaniganz 26. Nov 2012 13:59

AW: allgemeine Pointer Frage
 
ah :)

Okay, ich hatte folgendes gemacht:

Wenn
Delphi-Quellcode:
myarray[I].mystring
mir nur die SpeicherAdresse in den STREAM schreibt dann kann Ich doch
Delphi-Quellcode:
myarray[I].mystring^
direkt dereferenzieren oder?

Dann gibts aber den Compilerfehler "Zeigertyp erforderlich". Dann Casten wir den String als PChar und dereferenzieren dann, wieso ist dann kein "Zeigertyp erforderlich"?

Grüße

p80286 26. Nov 2012 14:02

AW: allgemeine Pointer Frage
 
Und da wundern sich manche, daß Pointer gerne gemieden werden.

Gruß
K-H

himitsu 26. Nov 2012 14:04

AW: allgemeine Pointer Frage
 
Ein "LongString" ist halt intern ein Zeiger.

Man könnte nun
Delphi-Quellcode:
str[1]
übergeben, oder
Delphi-Quellcode:
PChar(str)^
, nur daß Ersteres knallt, wenn der String leer ist, wärend PChar im Falle eines Leerstrings (intern nil) einen Zeiger auf einen alternativen "leeren String" zurückgibt (also einen "String" aus #0 bestehend, bzw. genauer aus #0#0)

Zitat:

Wenn myarray[I].mystring mir nur die SpeicherAdresse in den STREAM schreibt dann kann Ich doch myarray[I].mystring^ direkt dereferenzieren oder?
Du hast das jetzt in einer Datei gespeichert ... ja, dann kannst du das "jetzt" auch wieder dereferenzieren,
aber lies die Datei mal morgen wieder aus :zwinker: (abgesehn davon, daß du dir dann beim Auslesen des "Zeigers" die automatische Speicherverwaltung des Strings zerschossen hast)

Deswegen gibt es ja auch spezialisierte Streams, welche direkt mit Strings umgehen können.
TStringStream, TReader, TWriter, TStringList uvm.

DeddyH 26. Nov 2012 14:05

AW: allgemeine Pointer Frage
 
Bevor wir hier langatmig erklären, verweise ich aus Faulheit auf den Hersteller :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:17 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz