TURBO PASCAL |
Новости
|
Приведение типов переменныхСсылка на переменную одного типа может быть преобразована в ссылку на переменную другого типа с помощью приведения типов пе- ременных. ┌─────────────┐ ┌───┐ ┌──────────┐ ┌───┐ приведение ───>│идентификатор├──>│ ( ├──>│ссылка на ├──>│ ) ├─> типов │ типа │ └───┘ │переменную│ └───┘ └─────────────┘ └──────────┘ Когда приведение типов применяется к ссылке на переменную, ссылка на переменную рассматривается как экземпляр типа, предс- тавленного идентификатором типа. Размер переменной (число байт, занимаемых переменной) должен быть равен размеру типа, представ- ленного идентификатором типа. После приведения типа переменной можно указать один или несколько квалификаторов, если это допус- кается указанным типом. Примечание: Определять допустимость приведения типа должен программист. Приведем несколько примеров приведения типов переменных: type TByteRec = record lo, hi: byte; end; TWordRec = record low, high: word; end; TPtrRec = record ofs, seg: word; end; PByte = ^Byte; 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).lo; B := PByte(L)^; P := Ptr($40,$49); W := TPtrRec(P).seg; Inc(TPtrRec(P).Ofs,4); end. Обратите внимание на использование для доступа к младшим и старшим байтам слова типа TByteRec: это соответствует встроенным функциям Lo и Hi, только над левой частью в операции присваивание может выполняться приведение типа. Отметим также, что для доступа к младшим и старшим словам длинного целого, а также к смещению и адресу сегмента указателя используются типы TWordRec и TPtrRec. Borland Pascal также полностью поддерживает приведение типов для процедурных типов. Например, имея следующие описания: type Func = function(X: Integer): Integer; var F: Func; P: Pointer; N: Integer; вы можете построить следующие присваивания: F := Func(P); { присвоить F значение процедурного типа в P } Func(P) := F; { присвоить P значение процедурного типа в F } @F := P; { присвоить F значение-указатель в P } P := @F; { присвоить P значение-указатель в F } N := F(N); { вызвать функцию через F } N := Func(P)(N); { вызвать функцию через P } Обратите в частности внимание на операцию получения адреса @, которая применяется к переменной процедурного типа. Ее можно использовать в левой части присваивания. Кроме того, отметьте приведение типа на последней строке при вызове функцию через пе- ременную-указатель. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |