指针转换
指针转换是在使用指针时执行的,包括指针分配,初始化和比较。
仅 C 开头。
涉及指针的转换必须使用显式类型强制类型转换。 此规则的例外情况是 C 指针允许的赋值转换。 在下表中,
左操作数的引用类型必须与右操作数具有相同的限定符。 如果另一个指针的类型为
const限定的 lvalue 不能用作赋值的左操作数。| 左操作数类型 | 允许的右操作数类型 |
|---|---|
指向 (对象) T 的指针 |
|
指向 (函数) F 的指针 |
|
void*,那么对象指针可能是不完整的类型。
仅 C 结束。
- 零常量到空指针
- 求值为零的常量表达式是 空指针常量。 此表达式可以转换为指针。 此指针将为空指针 (具有零值的指针) ,并且保证不指向任何对象。
求值为零的常量表达式也可以转换为指向成员的空指针。 - 数组到指针
- 类型为 "数组 N" 的 lvalue 或 rvalue ,其中 N 是数组的单个元素的类型,对于 N
*。 结果是指向数组的初始元素的指针。 如果表达式用作&(地址) 运算符或sizeof运算符的操作数,那么无法执行转换。 - 函数到指针
除表达式用作
&(地址) 运算符,()(函数调用) 运算符或sizeof运算符的操作数外,可以将作为函数的 lvalue 转换为作为指向相同类型的函数的指针的 rvalue。