我正在发布一个问题的答案 - 并评论它发生在我身上,这要感谢另一张名为金属的海报
C++ 编译器允许这样做:
int *p = 0;
但不是这个int *p = 1
。算不算0
特殊号码?
编辑:@DavidHefferman 说Is 0 special? In the context of a pointer, yes it is.
- 为什么?
我正在发布一个问题的答案 - 并评论它发生在我身上,这要感谢另一张名为金属的海报
C++ 编译器允许这样做:
int *p = 0;
但不是这个int *p = 1
。算不算0
特殊号码?
编辑:@DavidHefferman 说Is 0 special? In the context of a pointer, yes it is.
- 为什么?
标准的第 4.10 节,指针转换 [conv.ptr] 说:
空指针常量是整数类型的整数常量表达式 (5.19) 纯右值,其计算结果为零或 std::nullptr_t 类型的纯右值。空指针常量可以转换为指针类型;结果是该类型的空指针值,并且可以与指向对象的指针或指向函数类型的指针的所有其他值区分开来。这种转换称为空指针转换。相同类型的两个空指针值应比较相等。将空指针常量转换为指向 cv 限定类型的指针是一次转换,而不是指针转换后跟限定转换 (4.4) 的顺序。整数类型的空指针常量可以转换为 std::nullptr_t 类型的纯右值。
所以,是的,0
是指针上下文中的一个特殊值。
0 是 NULL,而 1 是无效地址。
“空指针常量是一个积分常量表达式,其计算结果为零(例如 0 或 0L)。”