可以使用类型强制转换显式转换类型。
语法
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 * 原始类型的对象指针将返回到其原始值。