Язык программирования Си для персонального компьютера | страница 89
Таблица 4.4.
От типа | К типу | Метод |
float | char | преобразование к long; преобразование long к char |
float | short | преобразование к long; преобразование long к short |
float | long | усечение дробной части; результат не определен, если он слишком велик для представления типом long |
float | unsigned short | преобразование к long; преобразование long к unsigned short |
float | unsigned long | преобразование к long; преобразование long к unsigned long |
float | double | дополнение мантиссы нулевыми битами справа |
double | char | преобразование к float; преобразование float к char |
double | short | преобразование к float; преобразование float к short |
double | long | усечение дробной части; результат не определен, если он слишком велик для представления типом long |
double | unsigned short | преобразование к long; преобразование long к unsigned short |
double | unsigned long | преобразование к long; преобразование long к unsigned long |
double | float | усечение младших битов мантиссы; возможна потеря точности; если значение слишком велико для представления типом float, то результат преобразования не определен |
Указатель на значение одного типа может быть преобразован к указателю на значение другого типа. Результат может, однако, оказаться неопределенным из-за отличий в требованиях к выравниванию объектов разных типов и в размере памяти, занимаемом различными типами.
Указатель при объявлении всегда ассоциируется с некоторым типом. В частности, это может быть тип void. Указатель на void можно преобразовывать к указателю на любой тип, и обратно. Указателям на некоторый тип можно присваивать адреса объектов другого типа, однако компилятор выдаст предупреждающее сообщение, если только это не указатель на тип void.
Указатели на любые типы данных могут быть преобразованы к указателям на функции, и обратно. Однако в СП MSC для того, чтобы присвоить указатель на данные указателю на функцию (или наоборот), необходимо выполнить явное приведение его типа.
Специальные ключевые слова near, far, huge позволяют модифицировать формат и размер указателей в программе. Компилятор учитывает принятый в выбранной модели памяти размер указателей и может в некоторых случаях неявно производить соответствующие преобразования адресных значений. Так, передача указателя в качестве аргумента функции может вызвать неявное преобразование его размера к большему из следующих двух значений: