![]() |
Pointer
hoi,
kann mir jemand pointer erklären?(für mich verständlich erklären wenn es geht*G*), ich sehe in ihnen irgendwie kein vorteil. ich weiss nur das sie auf eine adresse zeigen. Ich weiss aber nicht mehr als:
Delphi-Quellcode:
procedure irgendwie;
var pi: ^integer; i: integer; begin pi^ := Addr(i); // toll nun weiss ich das: i := 5; pi^ := 5; //das gleiche sind end; und wo ist da denn der vorteil? |
Re: Pointer
Der Sinn der Pointer liegt darin, das es [egal] ist was inter jenem steht.
Bsp für Pointer Anwendungen: - Binärdaten - Verkettete Listen - Hierachische Listen (hoffentlich hab ich das richtig geschrieben) und alles was mir nicht einfällt. Bsp für Binärdaten:
Delphi-Quellcode:
GetMem(p, 1024);
Byte(p^) := 128; ... FreeMem(p); // in DOS FreeMem(p, 1024); |
Re: Pointer
Alles ist eigentlich ein Pointer. selbst wenn du
var s: string; hast ist s ein Pointer auf den Anfang des Strings im RAM. selbst dein vertrautes Form1 ist nur ein Pointer. man kann pointer leicht übergeben ,z.B. in der EnumWindows Prozedur. man kann einfach Ringspeicher realisieren (also verkettete Listen) und auch ganz einfach Baum- und Netzwerkstrukturen für Daten. Die DIREKTE verwendung von Pointern ist aber leider etwas heikel ( jeder kennt die Fehler, Access Violation, Read of address ....) deswegen haben Pointer keinen so guten Ruf bei programmieren. |
Re: Pointer
Du willst was über Pointer erfahren: :mrgreen: Kuck dir hier das Video an. :tongue:
|
Re: Pointer
Da es mich auch interessiert:
Welches Video :?: Ciao fkerber |
Re: Pointer
danke, auch wenn ichs immernoch nicht kapiere *g*
@lueckie: video? ^^ |
Re: Pointer
|
Re: Pointer
lol, das video is geil :mrgreen:
in dem video sah das ganze ja so aus:
Delphi-Quellcode:
wieso überschreibt y denn x? die haben doch garnichts miteinander zu tun oder?
var
x: ^integer; y: ^integer; begin x^ := 42; y^ := 13; // überschreibt die 42? end; mir sind pointer immernoch nicht klar (wird mir wohl nie klar werden :cry: ) überall wo ich sehe das pointer eingsetzt werden könnte ich genauso einfach "normale" variablen nehmen |
Re: Pointer
Pointer zeigen ja eigentlich nur auf eine Stelle im Speicher.
Beispiel:
Delphi-Quellcode:
Ich hoffe es war einigermaßen verständlich, ansonsten nochmal posten was nicht verstanden wurde
var normalint: Integer;
zeigerint: ^Integer; //mit "^Integer" machen wir aus Integer einen Zeiger auf einen Integer begin normalint := 5; //der normalen Integervariablen weisen wir jetzt irgendeinen wert zu zeigerint := @normalint; //um zeigerint wie einen normalen Integer verwenden zu können muss man den Zeiger dereferenzieren - also "zeigerint^" verwenden showmessage(inttostr(zeigerint^)); //und wenn wir uns jetzt zeigerint ausgeben lassen sieht man das da 5 rauskommt zeigerint^ := 7; //jetzt setzen wir zeigerint auf 7 showmessage(inttostr(normalint)); //und wenn wir uns jetzt normalint anzeigen lassen steht da auch 7 weil wir ja an die stelle im speicher geschrieben haben wo normalint steht end; und noch nen Beispiel aus nem beitrag den ich zum thema Pointer schonmal in nem thread gepostet hab
Delphi-Quellcode:
var gesamt: Array[0..1] of char;
byte1, byte2: ^char; begin byte1 := @gesamt[0]; //byte1 auf dein speicher von gesamt[0] zeigen lassen byte2 := @gesamt[1]; //byte2 auf dein speicher von gesamt[1] zeigen lassen byte1^ := 'a'; //an der stelle im speicher "a" schreiben byte2^ := 'b'; //an der stelle im speicher "b" schreiben self.caption := gesamt; //und siehe da, in gesamt steht später "ab" end; |
Re: Pointer
hoi, das ist sehr gut erklärt, danke :thuimb:
ich hätt noch eine frage jo :wink:, und zwar: Zitat:
wieso haben byte1 und byte2 am ende kein "^" ? setzt man den nur ran bei werte-zuweisungen? Danke nochmal, ist wirklich gut erklärt. EDIT: wäre: byte1 := @gesamt[0]; //byte1 auf dein speicher von gesamt[0] zeigen lassen und byte1^ := gesamt[0]; //byte1 auf dein speicher von gesamt[0] zeigen lassen nicht das gleiche? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:12 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