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…