Работа с динамической памятью и указателями в системе Turbo Pascal. Мирецкий И.Ю - 7 стр.

UptoLike

Составители: 

Когда приведение типов применяется к ссылке на переменную, ссылка на переменную рассматри-
вается как экземпляр типа, представленного идентификатором типа. Размер переменной (число байтов,
занимаемых переменной) должен быть равен размеру типа, представленного идентификатором типа.
После приведения типа переменной можно указать один или несколько квалификаторов, если это допуска-
ется указанным типом.
Приведем
несколько примеров приведения типов переменных:
type
ByteRec = record
Lo,Hi : Byte;
end;
WordRec = record
Low, High : Word;
end;
PtrRec = record
Ofs, Seg : Word;
end;
BytePtr = ^Byte;
var
B: Byte;
W: Word;
L: LongInt;
P: Pointer;
begin
W := $1234;
B := ByteRec(W).Lo;
ByteRec(W).Hi := 0;
L := $01234567;
W := WordRec(L).Lo;
B := ByteRec(WordRec(L).Lo).Hi;
B := BytePtr(L)^;
P := Ptr($40,$49);
W := PtrRec(P).Seg;
Inc(PtrRec(P).Ofs,4);
end;
Отметим использование типа ByteRec для доступа к байтам младшей и старшей части слова;
это соответствует встроенным функциям Lo и Hi, за исключением того, что приведение переменных мож-
но использовать также и в левой части оператора присваивания. Также обратите внимание на использова-
ние WordRec и PtrRec типов для доступа
к младшему и старшему слову части длинного целого, и к сегмент-
ной части и смещению в указателе.
Turbo Pascal полностью поддерживает приведение типов переменных, включая процедурные типы.
Например, для объявлений
type
Func = function(X : Integer) : Integer;
var
F: Func;
P: Pointer;
N: Integer;
можно написать следующие присваивания:
F := Func(P); {присвоить процедурное значение из Р в F}
Func(P) := F; {присвоить процедурное значение из F в P}
@F := P; {присвоить значение указателя
из Р в F}
        Когда приведение типов применяется к ссылке на переменную, ссылка на переменную рассматри-
вается как экземпляр типа, представленного идентификатором типа. Размер переменной (число байтов,
занимаемых переменной) должен быть равен размеру типа, представленного идентификатором типа.
После приведения типа переменной можно указать один или несколько квалификаторов, если это допуска-
ется указанным типом.
        Приведем несколько примеров приведения типов переменных:

        type
               ByteRec = record
                    Lo,Hi : Byte;
               end;
               WordRec = record
                    Low, High : Word;
               end;
               PtrRec = record
                    Ofs, Seg : Word;
               end;
               BytePtr = ^Byte;
        var
              B: Byte;
              W: Word;
              L: LongInt;
              P: Pointer;
        begin
              W := $1234;
              B := ByteRec(W).Lo;
              ByteRec(W).Hi := 0;
              L := $01234567;
              W := WordRec(L).Lo;
              B := ByteRec(WordRec(L).Lo).Hi;
              B := BytePtr(L)^;
              P := Ptr($40,$49);
              W := PtrRec(P).Seg;
Inc(PtrRec(P).Ofs,4);
        end;

        Отметим использование типа ByteRec для доступа к байтам младшей и старшей части слова;
это соответствует встроенным функциям Lo и Hi, за исключением того, что приведение переменных мож-
но использовать также и в левой части оператора присваивания. Также обратите внимание на использова-
ние WordRec и PtrRec типов для доступа к младшему и старшему слову части длинного целого, и к сегмент-
ной части и смещению в указателе.

       Turbo Pascal полностью поддерживает приведение типов переменных, включая процедурные типы.
Например, для объявлений

        type
           Func = function(X : Integer) : Integer;

        var
              F: Func;
              P: Pointer;
              N: Integer;

можно написать следующие присваивания:

        F := Func(P);        {присвоить процедурное значение из Р в F}
        Func(P) := F;        {присвоить процедурное значение из F в P}
        @F := P;            {присвоить значение указателя из Р в F}