next up previous contents index search.gif
Next: 6.6 Operators Up: 6. Expressions Previous: 6.4 Value typecasts

6.5 The @ operator

The address operator @ returns the address of a variable, procedure or function. It is used as follows:

Address factor

\begin{syntdiag}\setlength {\sdmidskip}{.5em}\sffamily\sloppy \synt{address fact...
...t{function\ identifier}\\
\synt{qualified\ method\ identifier}
\)\end{syntdiag}
The @ operator returns a typed pointer if the $T switch is on. If the $T switch is off then the address operator returns an untyped pointer, which is assigment compatible with all pointer types. The type of the pointer is ^T, where T is the type of the variable reference. For example, the following will compile

Program tcast;
{$T-} { @ returns untyped pointer }

Type art = Array[1..100] of byte;
Var Buffer : longint;
    PLargeBuffer : ^art;

begin
 PLargeBuffer := @Buffer;
end.
Changing the {$T-} to {$T+} will prevent the compiler from compiling this. It will give a type mismatch error. By default, the address operator returns an untyped pointer. Applying the address operator to a function, method, or procedure identifier will give a pointer to the entry point of that function. The result is an untyped pointer. By default, you must use the address operator if you want to assign a value to a procedural type variable. This behaviour can be avoided by using the -So or -S2 switches, which result in a more compatible Delphi or Turbo Pascal syntax.

root
1999-06-10