Skip to content
Pointers
step 1/5

Reading — step 1 of 5

Learn

~1 min readPointers and Sets

Pascal has explicit pointer types — like C, but stricter.

Declare a pointer type:

type
    PInteger = ^integer;            // pointer to integer
    PNode = ^TNode;                  // forward — common in linked lists
    TNode = record
        Value: integer;
        Next: PNode;
    end;

New allocates, Dispose frees:

var
    p: PInteger;
begin
    New(p);             // allocate
    p^ := 42;           // dereference: ^ AFTER the pointer
    WriteLn(p^);        // 42
    Dispose(p);         // free
end.

Pascal's pointer dereference uses postfix ^, opposite to C's prefix *.

Linked list example:

type
    PNode = ^TNode;
    TNode = record
        Value: integer;
        Next: PNode;
    end;

var head, n: PNode;
begin
    head := nil;
    // Prepend a node
    New(n);
    n^.Value := 10;
    n^.Next := head;
    head := n;
    // ... continue ...
    // Walk: while head <> nil do begin ... ; head := head^.Next end;
end.

@variable — take address (similar to C's &):

var
    x: integer;
    px: PInteger;
begin
    x := 5;
    px := @x;            // points to x
    WriteLn(px^);        // 5
end.

nil is the null pointer. Always check before dereferencing.

For most modern Pascal code, prefer dynamic arrays and class instances (which are reference-counted in some FPC modes) over manual pointer juggling.

Discussion

Ask a question, share an insight, or help someone who’s stuck.

Sign in to post a comment or reply.

Loading…