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
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.656 Beiträge
 
Delphi 12 Athens
 
#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
44.338 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.
Ein Therapeut entspricht 1024 Gigapeut.

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.656 Beiträge
 
Delphi 12 Athens
 
#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 BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#7

AW: allgemeine Pointer Frage

  Alt 26. Nov 2012, 15:54
Ich möchte nochmal auf die Ausgangsfrage zurückkommen

Man kann sich die Signatur von Write mal angucken: function Write(const Buffer; Count: Longint): Longint; virtual; abstract;

Ein const-Parameter ist ein spezieller var-Parameter, also kennzeichnet const einen Call-By-Reference-Parameter.
Dh. wenn du Stream.Write(Buffer^, counter ); aufrufst, übergibst du einen Zeiger (const) auf den Inhalt (^) eines Zeigers (buffer).
Also hat die Funktion am Ende eine Referenz auf die Daten, die zu schreiben sind.


Im Unterschied dazu übergibt Stream.Write(Buffer, counter ); einen Zeiger (const) auf einen Zeiger (buffer).
Also hat die Funktion am Ende eine Referenz auf den Zeiger buffer und nicht auf die zu schreibenden Daten.
Intellekt ist das Verstehen von Wissen. Verstehen ist der wahre Pfad zu Einsicht. Einsicht ist der Schlüssel zu allem.

Geändert von BUG (26. Nov 2012 um 15:57 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von ATS3788
ATS3788

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

AW: allgemeine Pointer Frage

  Alt 27. Nov 2012, 08:02
Oh ich sehe so trivial war die Frage gar nicht.

Es ist nur blöd wenn man alle Jubeljahre so was macht und dann
im Stream.Memory nur Schrott stehen hat.

Supi für die vielen Antworten
Martin MIchael
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: allgemeine Pointer Frage

  Alt 27. Nov 2012, 08:46
Wertest du das Result von Write eigentlich aus?

Wenn nicht, dann verwende besser WriteBuffer, denn da ist wenigstens noch eine Prüfung mit eingebaut.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Antwort Antwort


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 04:07 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz