Pointer Dereference (^)
The pointer dereference expression "unwraps" a Pointer and gives access to the Field or local variable that the pointer referred to. The result has the same type as the original value, and can be used in any expression where such a value would be usable. For example, a dereferenced Integer pointer is an integer:
var i := 5;
var a := @i;
...
a^ := 7; // a is the same integer as `i`.
var x := a^ + 5; // gives 13
De-referencing a nil
pointer will result in a Null Reference Exception, and de-referencing an invalid (garbage) pointer can result in memory corruption or crashes.
One can think of a pointer dereference as the opposite of the Address-Off (@
) Operator.
Automatic Dereferencing
When accessing members of a record through a pointer using the Member Access(.
) Operator, the ^
is optional:
type
MyRecord = record
a: Integer;
end;
var x := ^MyRecord;
x^.a := 5;
x.a := 5; // same thing
Note that this does not extend to calling methods or accessing properties; this is to avoid the ambiguity of invoking a method (such as ToString
, on .NET) on the pointer itself.
Pointers on Managed Platforms
Note that the use of pointers is only allowed for Unsafe Code on the .NET platform, and is not supported at all on the Java platform. Pointers are fully supported on Cocoa and Island.
See Also
- Pointers
- Unsafe Code on .NET
- Address-Off (
@
) Operator - Unary Operators
nil
Expressions