^
^
In ASCII the character code decimal 94 (or hexadecimal 5E) is defined to be ^ (circumflex accent).
For any data type, a pointer type for that data can be declared using the operator ^ in front of the data type.
program pointerDemo(input, output, stderr);
type
listItem = record
payload: integer;
// next _points_ _to_ a list item
next: ^listItem;
end;
var
start: ^listItem;
begin
new(start);
if not assigned(start) then
begin
writeLn(stderr, 'obtaining memory for start failed');
halt(1);
end;A pointer can be followed, dereferenced by appending a ^ to the identifier. Instead of having the memory address in your hands, you will look at the memory content at that address. If it is a typed pointer, operations and syntax for that type are valid, e.g. assignment in the following example.
// _de-reference_ the pointer, i.e. follow it
start^.payload := 7;
dispose(start);
end.However, attempting to follow a nil pointer will cause a runtime error (RTE 216 “general protection fault”). That is the situation the condition not assigned(start) in line 15 is supposed to catch.
see also
- {$pointerMath off} disallows usage of pointers in arithmetic expressions
- {$typedAddress on} in conjunction with the @-address-operator
- {$modeSwitch autoDeref-}
From the Free Pascal wiki, page "^", as it stood on 2023-02-18 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.