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).
|