类型强制转换的转换

可以使用类型强制转换来显式转换类型。

语法

cast-expression
unary expression **

( type-name ) cast-expression

type-name
specifier-qualifier-list abstract-declarator ** opt

type-name 是类型,cast-expression 是要转换为该类型的值。 具有类型强制转换的表达式不是左值。 cast-expression 也会被转换,就好像它已分配到 type-name 类型的变量一样。 赋值的转换规则(在赋值转换中进行了概述)也适用于类型强制转换。 下表显示了可强制转换为任何给定类型的类型。

目标类型 可能的源
整型 整数类型或浮点类型,或者指向对象的指针
浮点 任何算术类型
指向对象的指针或 (void \*) 任何整数类型、(void \*)、指向对象的指针或函数指针
函数指针 任何整数类型、指向对象的指针或函数指针
结构、联合或数组
Void 类型 任何类型

任何标识符均可强制转换为 void 类型。 但是,如果 type-cast 表达式中指定的类型不是 void,则要强制转换为该类型的标识符不能是 void 表达式。 任何表达式均可转换为 void,但 void 类型的表达式不能强制转换为其他类型。 例如,带有 void 返回类型的函数不能将其返回值强制转换为另一类型。

请注意,void \* 表达式具有指向 void 的类型指针,而不具有类型 void。 如果对象强制转换为 void 类型,则生成的表达式不能分配给任何项。 同样,type-cast 对象是不可接受的左值,因此不能对 type-cast 对象进行任何分配。

Microsoft 专用

只要标识符的大小不变,类型强制转换就可以是左值表达式。 有关左值表达式的信息,请参阅左值和右值表达式

结束 Microsoft 专用

可以使用强制转换将表达式转换为类型 void,但生成的表达式仅能用于不需要值的位置。 转换为 void \* 再转换回原始类型的对象指针将返回到其原始值。

另请参阅

类型转换