Справочник языка Cи


Явные преобразования типов


Явное преобразование типа может быть выполнено посредством операции приведения типа. Она имеет следующую синтаксическую форму

(<абстрактное-имя-типа>) <операнд>

<абстрактное-имя-типа> — специфицирует некоторый тип; <операнд> — выражение, значение которого должно быть преобразовано к специфицированному типу (абстрактные имена типов рассмотрены в разделе 3.8.3).

Преобразование операнда осуществляется так, как если бы он присваивался переменной типа <имя-типа>. Правила преобразования для операции присваивания, приведенные в разделе 4.7.1, полностью действуют для операции приведения типа. Однако, преобразование к типу char или short выполняется как преобразование к int. а преобразование к типу float — как преобразование к double.

Имя типа void может быть использовано в операции приведения типа, но результирующее выражение не может быть присвоено никакому объекту, и ему также нельзя ничего присвоить. Значение типа void

не может быть приведено ни к какому типу; например, результат функции, возвращающей void, не может быть присвоен.

Результат операции приведения типа L-выражения сам является L-выражением и может представлять левый (или единственный) операнд операции присваивания, если приведенный тип не превышает по размеру исходный тип.

Если объявлен указатель на функцию, то в приведении его типа можно задавать другие типы аргументов. Например:

int (*р)(long);             /* объявление указателя на функцию */

(*(int(*)(int))р)(0);       /*вызов функции по указателю */

В операции приведения типа можно также задавать объявление структурного типа (тега), например:

(struct {int

a; int b;} *)р->а = 5;

Область действия этого тега распространяется в СП MSC на остаток блока, а в СП ТС — на остаток тела функции.



Содержание раздела