Type-Cast 转换

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

语法

cast-expression:
unary-expression
( type-name ) cast-expression

type-name:
specifier-qualifier-list abstract-declarator 选择

type-name是一种类型,cast-expression是一个要转换为该类型的值。 具有类型强制转换的表达式不是 l 值。 转换 cast-expression 方式好像已分配给类型的 type-name变量一样。 分配的转换规则(分配 转换中概述)也适用于类型强制转换。 下表显示了可强制转换为任何给定类型的类型。

目标类型 潜在来源
整型 任何整数类型或浮点类型,或指向对象的指针
浮点 任何算术类型
指向对象的指针,或 void * 任何整数类型、 void *指向对象的指针或函数指针
函数指针 任何整型、指向对象的指针或函数指针
结构、联合或数组 没有
Void 类型 任意类型

任何标识符都可以强制转换为 void 类型。 但是,如果类型转换表达式中指定的类型不是 void,则转换为该类型的标识符不能是 void 表达式。 任何表达式都可以强制转换为 void,但类型的 void 表达式不能强制转换为任何其他类型。 例如,具有 void 返回类型的函数不能将其返回强制转换为另一种类型。

void *表达式具有指向void的类型指针,而不是类型void。 如果对象强制转换为 void 类型,则无法将生成的表达式分配给任何项。 同样,类型转换对象不是可接受的 l 值,因此无法对类型转换对象进行赋值。

Microsoft 专用

只要标识符的大小不更改,类型强制转换就可以是 l 值表达式。 有关 l 值表达式的信息,请参阅 L-Value 和 R-Value 表达式

结束 Microsoft 专用

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

另请参阅

类型转换