Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeigeroperationen (https://www.delphipraxis.net/89648-zeigeroperationen.html)

dr. love 3. Apr 2007 15:15


Zeigeroperationen
 
a und b sind als Pointer vom Typ Byte definiert, also

Delphi-Quellcode:
var a,b: ^byte;
bei der Arbeit mit den Zeigern ist mir aufgefallen, dass folgende 3 Operationen

Delphi-Quellcode:
pointer(a):=pointer(b);
Delphi-Quellcode:
a^:=b^;
Delphi-Quellcode:
a:=b;
immer das gleiche Ergebnis liefern. Dabei wird immer die Adresse von b dem Pointer a zugewiesen. Wo liegt also der Unterschied der Operationen, bzw. welche ist für welchen Fall gut geeignet?

Zacherl 3. Apr 2007 15:17

Re: Zeigeroperationen
 
Da deine Variablen sowieso vom Pointer Typ sind, würde ich

Delphi-Quellcode:
a := b;
verwenden. Die anderen Zuweisungen führen unnötige Typecasts durch.

Ghostwalker 3. Apr 2007 15:47

Re: Zeigeroperationen
 
Delphi-Quellcode:
  pointer(a) := pointer(b);

  a := b
Diese Varianten sind in der Tat gleich. Du weißt der Variable a die gleiche ADRESSE wie der Variablen b zu (Zeigervariablen speichern ja bekanntlich nur Adressen !).

Wenn also Variable b die Adresse $B000 enthält, enthält im Anschluß der Operation Variable a ebenfalls $B000

Delphi-Quellcode:
   a^ := b^
Hier tauscht du den INHALT der Speicherzellen aus. Die Adressen, auf die die beiden Variablen zeigen, bleiben gleich.

Beispiel

Variable a zeigt auf die Adresse $A000 und hat den Inhalt 134
Variable b zeigt auf die Adresse $B000 und hat den Inhalt 42

Nach der Operation schaut das ganze wie folgt aus

Variable a zeigt auf die Adresse $A000 und hat den Inhalt 42
Variable b zeigt auf die Adresse $B000 und hat den Inhalt 42

Es hat also sehr wohl einen Unterschied, insbesondere wenns dynamisch wird (New/Dispose) kann die 1. Variante fatale Folgen haben.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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