AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

allgemeine Pointer Frage

Ein Thema von ATS3788 · begonnen am 26. Nov 2012 · letzter Beitrag vom 27. Nov 2012
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von ATS3788
ATS3788

Registriert seit: 18. Mär 2004
Ort: Kriftel
646 Beiträge
 
Delphi XE Starter
 
#1

allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:12
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
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:14
Buffer bezeichnet den Pointer an sich, Buffer^ den Speicherbereich, auf den der Pointer zeigt (also Dein Array).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#3

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:25
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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Nov 2012 um 13:33 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#4

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:40
ich hab's mir so gemerkt:
Zeiger:=Adr(variable); oder
wie Himitsu es ausgeführt hat
Zeiger:=@Variable; der Zugriff erfolgt dann über
TIrgendeinTyp(Zeiger^) wichtig ist nur Zeiger enthält nur die Adressinformation, der eigentliche Wert ist in Zeiger^ Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#5

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:45
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?

Stream.Write(PChar(Daten[I].Name)^, Len);
kann man da nicht einfach
Code:
Daten[I].Name
übergeben?

grüße
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:54
Lies doch einfach mal 3 Sätze weiter
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Jonas Shinaniganz
Jonas Shinaniganz

Registriert seit: 30. Aug 2011
249 Beiträge
 
Delphi XE5 Ultimate
 
#7

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 13:59
ah

Okay, ich hatte folgendes gemacht:

Wenn myarray[I].mystring mir nur die SpeicherAdresse in den STREAM schreibt dann kann Ich doch 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
Die Leiter der Entwicklungsabteilung dreht total am Mausrad!
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#8

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 14:02
Und da wundern sich manche, daß Pointer gerne gemieden werden.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.115 Beiträge
 
Delphi 12 Athens
 
#9

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 14:04
Ein "LongString" ist halt intern ein Zeiger.

Man könnte nun str[1] übergeben, oder 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 (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.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (26. Nov 2012 um 14:09 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 14:05
Bevor wir hier langatmig erklären, verweise ich aus Faulheit auf den Hersteller
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:56 Uhr.
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