В отличие от преобразования типов приведение типов позволяет по-разному интерпретировать одну область памяти. Функция приведения типа применима только к переменным или элементам массива (преобразование типов применимо и к выражениям). Рекомендуется использовать приведение типов только для типов, имеющих одинаковую длину. Например, Integer и Color или Real и Long. Список функций приведения типов приведен в табл. 6.
Таблица 6. Функции приведения типов
Название | Тип результата | Описание |
---|
Treal | Real | Четыре байта, адресуемые приводимой переменной, интерпретируются как действительное число. |
Tinteger | Integer | Два байта, адресуемые приводимой переменной, интерпретируются как целое число. |
Tlong | Long | Четыре байта, адресуемые приводимой переменной, интерпретируются как длинное целое. |
TrealArray | RealArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив действительных чисел. |
TPRealArray | PRealArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив действительных чисел. |
TintegerArray | IntegerArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив целых чисел. |
TPIntegerArray | PIntegerArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив целых чисел. |
TlongArray | LongArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив длинных целых. |
TPLongArray | PLongArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив длинных целых. |
Tlogic | Logic | Адресуемый приводимой переменной байт интерпретируются как логическая переменная. |
TlogicArray | LogicArray | Область памяти, адресуемая приводимой переменной, интерпретируются как массив логических переменных. |
TPLogicArray | LogicArray | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на массив логических переменных. |
TColor | Color | Два байта, адресуемые приводимой переменной, интерпретируются как переменная типа цвет. |
TFuncType | FuncType | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес функции. |
TPointer | Pointer | Четыре байта, адресуемые приводимой переменной, интерпретируются как адрес. |
Tstring | String | 256 байт области памяти, адресуемой приводимой переменной, интерпретируются как строка символов. |
TPString | PString | Четыре байта, адресуемые приводимой переменной, интерпретируются как указатель на строку символов. |
Tvisual | Visual | Четыре байта, адресуемые приводимой переменной, интерпретируются как отображаемый элемент. |
Следующие примеры иллюстрируют использование преобразования и приведения типов:
При вычислении следующих четырех выражений, получаются различные результаты
>4096 * 4096 = 0
Поскольку константа 4096 имеет тип Integer, а 4096 * 4096 = 16777216 = 256 * 65536, то есть младшие два байта результата равны нулю.
>Long(4096 * 4096) = 0
Поскольку оба сомножителя имеет тип Integer, то и выражение имеет тип Integer. Следовательно, результат умножения равен нулю, который затем преобразуется к типу Long.
>Long(4096) * 4096 = 16777216
Поскольку первый сомножитель имеет тип длинное целое, то и выражение имеет тип длинное целое.
>4096.0 * 4096 = 1.677722E+7
Поскольку первый сомножитель имеет тип Real, то и выражение имеет тип Real. Из-за недостатка точности произошла потеря точности в седьмом знаке.
В следующем примере, используя приведение типов, в массив действительных чисел A размером в 66 элементов складываются: действительное число в первый элемент массива; длинное целое во второй элемент массива и символьную строку в элементы с 3 по 66.
>A[1] = 1.677722E+7
>TLong(A[2]) = 16777216
>TString(A[3]) = ‘Пример приведения типов’
Необходимо отметить, что элементы массива A, начиная со второго, после выполнения приведенного выше фрагмента программы не рекомендуется использовать как действительные числа, поскольку элемент A[2] содержит значение 2.350988Е-38, а элемент A[5] — значение –4.577438Е-18. Значение элементов, начиная с A[8] (символьная строка ‘Пример приведения типов’ содержит 23 символа и занимает 24 байта, то есть шесть элементов массива) вообще не зависят от приведенного фрагмента программы и содержат «мусор», который там находился ранее.