Node: Pointer Types, Next: Procedural Types, Previous: Set Types, Up: Type Definition Possibilities

##### Pointer Types

         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).