TURBO PASCAL

Новости

Программы   

Turbo Pascal 

Игры

Документация   

Странности

FAQ

Ссылки

Форум

Гостевая книга

Рассылка

Благодарности

Об авторе

 

 

Приведение типов переменных 

             Ссылка на  переменную одного типа может быть преобразована в
        ссылку на переменную другого типа с помощью приведения типов  пе-
        ременных.

                        ┌─────────────┐   ┌───┐   ┌──────────┐   ┌───┐
         приведение ───>│идентификатор├──>│ ( ├──>│ссылка на ├──>│ ) ├─>
         типов          │    типа     │   └───┘   │переменную│   └───┘
                        └─────────────┘           └──────────┘

             Когда приведение типов применяется к ссылке  на  переменную,
        ссылка  на переменную рассматривается как экземпляр типа,  предс-
        тавленного идентификатором типа.  Размер переменной (число  байт,
        занимаемых переменной) должен быть равен размеру типа,  представ-
        ленного идентификатором типа.  После приведения  типа  переменной
        можно указать один или несколько квалификаторов,  если это допус-
        кается указанным типом.

                   Примечание: Определять  допустимость  приведения  типа
              должен программист.

             Приведем несколько примеров приведения типов переменных:

             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 }

             Обратите в частности внимание на операцию  получения  адреса
        @,  которая применяется к переменной процедурного типа.  Ее можно
        использовать в левой части  присваивания.  Кроме  того,  отметьте
        приведение  типа на последней строке при вызове функцию через пе-
        ременную-указатель.

Содержание

На первую страницу

Rambler's Top100 Rambler's Top100
PROext: Top 1000

(с)Все права защищены

По всем интересующим вопросам прошу писать на электронный адрес

Hosted by uCoz