var MyChar: char;
...
Shortint(MyChar) := 122;
assigns
the character
z
(ASCII 122) to
MyChar
.
You can cast variables to a procedural type. For example, given the declarations
type Func = function(X: Integer): Integer;
var
F: Func;
P: Pointer;
N: Integer;
you can make the following assignments.
F := Func(P); { Assign procedural value in P to F }
Func(P) := F; { Assign procedural value in F to P }
@F := P; { Assign pointer value in P to F }
P := @F; { Assign pointer value in F to P }
N := F(N); { Call function via F }
N := Func(P)(N); { Call function via P }
Variable typecasts can also be followed by qualifiers, as illustrated in the following example.
type
TByteRec =
record
Lo, Hi: Byte;
end;
TWordRec = record
Low, High: Word;
end;
var
B: Byte;
W: Word;
L: Longint;
P: Pointer;
begin
W := $1234;
B := TByteRec(W).Lo;
TByteRec(W).Hi := 0;
L := $1234567;
W := TWordRec(L).Low;
B := TByteRec(TWordRec(L).Low).Hi;
B := PByte(L)^;
end;
In this example,
TByteRec
is used to access the low- and high-order bytes of a word, and
TWordRec
to access the
low- and high-order words of a long integer. You could call the predefined functions
Lo
and
Hi
for the same purpose,
but a variable typecast has the advantage that it can be used on the left side of an assignment statement.
57