![]() |
Re: Pointer, Arbeitsspeicher etc..
Oook ich habe das eiiiinigermaßen kapiert, ABER ich sehe keinen Vorteil in Zeigern.
Warum über einen Zeiger irgendwo drauf zugreifen wenns auch "normal" geht ? Wobei diese Frage wahrscheinlich zeigt das ichs doch nicht kapiert hab :mrgreen: |
Re: Pointer, Arbeitsspeicher etc..
Zeiger sind dann praktisch, wenn du sicherstellen willst, dass du die Änderung einer Variablen immer mitbekommst. Sagen wir, du hast zwei Variablen, a und b.
Wenn du jetzt willst, dass in b das gleiche drinsteht wie in a, was tust du dann? Vermutlich b := a; So, wenn sich jetzt aber der Wert von a ändert, wird in b immer noch der alte Wert drinstehen. Dieses Problem kann man mit Zeigern lösen:
Delphi-Quellcode:
Ein Nachteil von Zeigern ist, dass man ein bisschen mehr aufpassen muss, was man tut. Insbesondere reservierten Speicher wieder freizugeben, keine NIL-Zeiger zu dereferenzieren usw.
var a: integer;
b: ^integer; begin a := 5; b := @a; // Jetzt zeigt b auf die Stelle im Speicher, an der a steht // in b^ steht jetzt 5 a := 3; // in b^ steht jetzt ebenfalls 3! end; |
Re: Pointer, Arbeitsspeicher etc..
ach sooooo. Ok. Aber das brauchte ich bis jetzt glaub ich kaum ^^
Naja danke, jetzt weiß ich wofür Zeiger gut sind :) |
Re: Pointer, Arbeitsspeicher etc..
Zitat:
Allerdings "versteckt" Delphi viele Zeiger vor dir: Alle Objektinstanzen sind nämlich eigentlich Zeiger. Also eine Zeile der Form Form1.Caption := ... geht eigentlich nur durch CompilerMagic. Denn Form1 ist an und für sich ein Zeiger (auf das Objekt). Ohne Compilermagic müsste man den erst dereferenzieren. Das Objekte Zeiger sind ist wichtig im Hinterkopf zu behalten, wenn man solche Konstrukte baut: Form1 := Form2; Nicht nur dass jetzt der von Form2 belegte Speicher verloren ist, eine Änderung der einen Instanz wird immer auch bei einem Zugriff auf Form2 "sichtbar" sein (da jetzt beide auf die selbe Instanz verweisen). Daher wird in TPersistent ja auch die Assign-Methode eingeführt. |
Re: Pointer, Arbeitsspeicher etc..
Zitat:
a) dynamisch instanzierten Objekten b) Strings c) Arrays d) höhere Datenstrukturen wie z.B. verkettete Listen e) Schnittstellen ... Nur weil man sie meistens in Delphi nicht sieht, heißt das nicht, dass sie nicht da sind. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:16 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