Pointer
In Pointern speichert man die Adresse von Variablen oder Funktionsblöcken zur Laufzeit eines Programms.
Pointerdeklarationen haben folgende Syntax:
<Bezeichner>: POINTER TO
<Datentyp/Funktionsblock>;
Ein Pointer kann auf jeden beliebigen Datentyp und Funktionsblock zeigen, auch selbstdefinierte.
Mit dem Adressoperator ADR wird dem Pointer die Adresse einer Variablen oder Funktionsblocks zugewiesen.
Die Dereferenzierung eines Pointers erfolgt über den Inhaltsoperator "^" nach dem Pointerbezeichner. Mit der Hilfe des Operators SIZEOF wird ein Pointer z.B. inkrementiert.
Ein Pointer wird byte-weise hochgezählt! Über die Anweisung p=p+SIZEOF(p^); kann ein Hochzählen wie im C-Compiler erreicht werden. |
Hinweis | |
Adressenverschiebung Wenn Online Change angewendet wird, können sich Inhalte von Adressen verschieben. Beachten Sie dies bei der Verwendung von Pointern auf Adressen. |
Beispiel:
pt:POINTER TO INT;
var_int1:INT := 5;
var_int2:INT;
pt := ADR(var_int1);
var_int2:= pt^; (* var_int2 ist nun 5 *)
Beispiel 2 (Pointer Inkrementierung):
ptByCurrDataOffs : POINTER TO BYTE;
udiAddress : UDINT;
(*--- pointer increment ---*)
udiAddress := ptByCurrDataOffs;
udiAddress := udiAddress + SIZEOF(ptByCurrDataOffs^);
ptByCurrDataOffs := udiAddress;
(* -- end of pointer increment ---*)