Zeiger-Datentypen werden wie folgt vereinbart:
TYPE name = ^basistyp;

Dynamische Variablen können folgendermaßen deklariert werden:
VAR zeiger_variable : zeiger_typ;
oder
zeiger_variable : ^basistyp;
Bemerkung: Beispiel 1:
VAR pi : ^INTEGER;
New(pi); { Speicherplatzanforderung }
pi^ := 7;
Beispiel 2:
TYPE pinteger = ^INTEGER;
VAR pi : pinteger;
New(pi); { Speicherplatzanforderung }
pi^ := 7;
Anweisungsreihenfolge
Die Regel, daß in Deklarationsanweisungen nur auf Datentypen Bezug
genommen werden darf, die zuvor definiert wurden, läßt in
Bezug auf Zeiger eine Ausnahme zu:
Der Basisdatentyp einer Zeigervariablen darf nachfolgend definiert werden,
vorausgesetzt, dies geschieht innerhalb des gleichen Blocks.
Beispiel:
TYPE prec = ^rec;
rec = RECORD
id : INTEGER;
name : PACKED ARRAY[1..20] OF CHAR;
next : prec;
END;
Diese Regelung ist notwendig, um rekursive Datenstrukturen wie Listen,
Bäume, usw. definieren zu können.
Zuordnung von Speicherplatz zu einer dynamischen Variablen
Die Zuordnung von Speicherplatz zu einer dynamischen Variablen wird wie folgt vorgegangen:
New(zeiger_variable);Der Wert der Variablen ist - nach erfolgreicher Speicherplatzanforderung - die Adresse des zugewiesenen Speicherbereiches.
Der zugewiesene Speicherplatz kann zur Ablage eines Wertes vom Typ basistyp verwendet werden.
Achtung:
Der zugewiesene Speicherplatz wird im allgemeinen nicht initialisiert !
Da im Speicher jedoch immer "irgendetwas" steht, verweist die Zeigervariable
zunächst auf einen zufälligen Wert.
Um anzuzeigen, daß kein Speicherplatz zugewiesen wurde, existiert eine spezielle Konstante:
NILDynamisch angeforderter Speicherplatz sollte, wenn er nicht mehr benötigt wird, so bald als möglich wieder freigegeben werden.
Dispose(zeiger_variable);Auf eine Zeiger-Variable können folgende Operatoren angewendet werden:
= verweisen die Zeiger auf das gleiche Objekt ? <> verweisen die Zeiger auf verschiedene Objekte ?Weitere Operatoren sind in Pascal nicht auf Zeiger anwendbar.
Zugriff auf dynamisch angeforderten Speicherbereich
Auf den Wert, der im Speicherbereich befindet, auf den eine Zeigervariable verweist, kann folgendermaßen zugegriffen werden:
zeigervariable^Beispiel:
TYPE pint = ^INTEGER;
VAR p : pint;
BEGIN
New(p);
p^ := 1;
Writeln(p^);
END;
Ermittlung von Adressen
Der Zugriff auf Adressen ist weder in Standard Pascal noch in Extended Pascal vorgesehen.
Turbo Pascal, Delphi
In Turbo Pascal existiert ein Adreßoperator:
@nameAchtung:
Turbo Pascal, Delphi, XL Pascal
Die Adresse einer Programmgröße kann mit Hilfe der Funktion Addr ermittelt werden:
Addr(name)Beispiel 1:
PROCEDURE value(x: INTEGER);
VAR ptr := ^INTEGER;
BEGIN
ptr := @x;
ptr^ := 15; { entspricht x := 15; }
END;
Beispiel 2:
PROCEDURE var(VAR y: INTEGER);
VAR ptr = ^INTEGER;
BEGIN
ptr := @y;
ptr^ := 15; { entspricht y := 15; }
END;
Prüfung der Belegung eines Zeigers
Der Wert eines Zeigers
Die Unzulässigkeit einer Adresse kann bedeuten:
Der Test, ob ein Zeiger den Wert NIL besitzt, kann auch mit Hilfe
der Funktion Assigned ausgeführt werden.
Mit Assigned können außerdem Prozedurvariablen getestet
werden.
Ungetypte Zeiger
Die Pascal-Standards sehen - aus Sicherheitsgründen - vor, daß Zeiger immer an einen Datentyp gebunden sein müssen.
Einige Pascal-Systeme sehen allerdings Ausnahmen vor: Ungetypte Zeiger