@
│
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
The address operator @
returns the address of an identifier that is associated with an address (usually a variable or routine, but also a label).
Normally, what the value @
returns is an untyped pointer
.
If you are handling pointers a lot, and want to mitigate issues with passing references of wrong type’s target, you have to use the directive {$typedAddress on}
.
Here is an example to demonstrate what produces with untyped pointers valid and functional code, but semantically outputs an erroneous result:
program untypedAddressDemo(input, output, stderr);
procedure incrementIntByRef(const ref: PByte);
begin
inc(ref^);
end;
var
foo: integer;
begin
foo := -1;
incrementIntByRef(@foo);
writeLn(foo);
end.
It was intended that 0
(zero) gets printed, but the program prints -256
instead.
With {$typedAddress on}
compilation fails with an incompatible type error.
You usually want the latter behavior (compile-time error) instead of wasting time with hours of debugging.
other remarks
- In ASCII the character
@
(AT sign): has the value64
. - PXSC defines the
loc
function as the address-operator.
read more
single characters |
|
character pairs |
|