9.4. Преобразование типов
В раде случаев требуется преобразовать переменную одного типа в переменную другого типа. В Turbo Pascal такое преобразование осуществляется сравнительно просто, если переменные обоих типов имеют один и тот же размер. Для этого следует указать идентификатор типа, а за ним в круглых скобках переменную исходного типа. Если новый тип - структурированный, можно в случае необходимости выбрать компоненту в соответствии с общими правилами.
Пример.
type |
|
ByteRec = record |
|
Lo, Hi: Byte |
|
end; |
|
WordRec = record |
|
Low, High: Word |
|
end; |
|
PtrRec = record |
|
Ofs, Seg: Word |
|
end; |
|
BytePtr = ^Byte; |
|
var |
|
В: Byte; |
|
W: Word; |
|
L: Longint; |
|
P: Pointer; |
|
begin |
|
W := $1234; |
{присвоение переменной W значения} |
В := ByteRec(W).Lo; |
{преобразование переменной типа Word в запись из двух байтов и выделение младшего байта} |
ByteRec(W).Hi := 0; |
{преобразование переменной типа Word в запись из двух байтов и запись в старший байт значения 0} |
L := $01234567; |
{присвоение переменной L значения} |
W := WordRec(L).Low; |
{преобразование переменной типа Longint в запись из двух слов и выделение младшего слова} |
В := ByteRec(WordRec(L).Low).Hi; |
{преобразование переменной типа Longint в запись из двух слов, выделение младшего слова, преобразование его в запись из двух байтов и выделение старшего байта} |
В := BytePtr(L)^; |
{преобразование переменной типа Longint в указатель и получение значения параметра, на который он указывает} |
Р :=Ptr ($40,$49); |
{Присвоение указателю Р значения с помощью стандартной функции Ptr} |
W := PtrRec(P).Seg; |
{преобразование указателя в запись из двух слов и выделение второго слова (фактически адреса сегмента)} |
Inc(PtrRec(P).Ofs, 4); |
{преобразование указателя в запись из двух слов, выделение первого слова (фактически смещения адреса) и увеличение его величины на 4 с помощью стандартной процедуры Inc} |
end; |
|
Такое преобразование возможно не только, когда исходный и окончательный типы имеют одинаковый размер. Оно возможно также в случае преобразования друг в друга двух порядковых типов (см. п. 3.2), независимо от их размера, а также преобразования параметра без типа (см. п. 10.3.4).
|