Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Pointer, Arbeitsspeicher etc.. (https://www.delphipraxis.net/57435-pointer-arbeitsspeicher-etc.html)

Neutral General 25. Nov 2005 14:38

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:

tigerman33 25. Nov 2005 14:50

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:
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;
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.

Neutral General 25. Nov 2005 14:52

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 :)

tigerman33 25. Nov 2005 14:56

Re: Pointer, Arbeitsspeicher etc..
 
Zitat:

Zitat von Neutral General
ach sooooo. Ok. Aber das brauchte ich bis jetzt glaub ich kaum ^^
Naja danke, jetzt weiß ich wofür Zeiger gut sind

Durch die Konzentration auf Klassen und Events braucht man Zeiger nicht mehr so oft. Früher kam man kaum ohne aus.

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.

Oxmyx 25. Nov 2005 15:16

Re: Pointer, Arbeitsspeicher etc..
 
Zitat:

Zitat von Neutral General
ach sooooo. Ok. Aber das brauchte ich bis jetzt glaub ich kaum ^^
Naja danke, jetzt weiß ich wofür Zeiger gut sind :)

Das ist wohl eher kaum der Hauptgrund, wieso es Zeiger gibt. Zeiger werden angewandt bei
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.
Seite 2 von 2     12   

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