Node:Pointer Types, Next:Procedural Types, Previous:Set Types, Up:Type Definition Possibilities
pointer_type_identifier = ^type_identifier;
A pointer of the type pointer_type_identifier holds the
address at which data of the type type_identifier is situated.
Unlike other identifier declarations, where all identifiers in
definition part have to be declared before, in a pointer type
declaration type_identifier may be declared after
pointer_type_identifier. The data pointed to is accessed by
pointer_type_variable^. To mark an unassigned pointer,
the nil constant (which stands for "not in list") has to be
assigned to it, which is compatible with all pointer types.
type
ItselfFoo = ^ItselfFoo; { possible but mostly senseless }
PInt = ^Integer; { Pointer to an Integer }
PNode = ^TNode; { Linked list }
TNode = record
Key : Integer;
NextNode: PNode;
end;
var
Foo, Bar: PInt;
begin
Foo := Bar; { Modify address which foo is holding }
Foo^ := 5; { Access data foo is pointing to }
end.
GPC also suports pointers to procedures or function and calls
through them. This is a non-standard feature.
program ProcPtrDemo (Output);
type
ProcPtr = ^procedure (i: Integer);
var
PVar: ProcPtr;
procedure WriteInt (i: Integer);
begin
WriteLn ('Integer: ', i : 1)
end;
begin
{ Let PVar point to function WriteInt }
PVar := @WriteInt;
{ Call the function by dereferencing the function pointer }
PVar^ (12345)
end.
See also: Pointer (Intrinsic).