![]() |
Zeigeroperationen
a und b sind als Pointer vom Typ Byte definiert, also
Delphi-Quellcode:
bei der Arbeit mit den Zeigern ist mir aufgefallen, dass folgende 3 Operationen
var a,b: ^byte;
Delphi-Quellcode:
pointer(a):=pointer(b);
Delphi-Quellcode:
a^:=b^;
Delphi-Quellcode:
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?
a:=b;
|
Re: Zeigeroperationen
Da deine Variablen sowieso vom Pointer Typ sind, würde ich
Delphi-Quellcode:
verwenden. Die anderen Zuweisungen führen unnötige Typecasts durch.
a := b;
|
Re: Zeigeroperationen
Delphi-Quellcode:
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 !).
pointer(a) := pointer(b);
a := b Wenn also Variable b die Adresse $B000 enthält, enthält im Anschluß der Operation Variable a ebenfalls $B000
Delphi-Quellcode:
Hier tauscht du den INHALT der Speicherzellen aus. Die Adressen, auf die die beiden Variablen zeigen, bleiben gleich.
a^ := b^
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