【发布时间】:2014-08-03 21:34:11
【问题描述】:
这个问题可能太糟糕了,但我可以冒险在这里发布这个问题来解决我的困惑。
实际上我的问题是我们只能将地址分配给指针,例如:-
int *p,a;
p = &a; // OK
p = 1; // Error because you cannot assign integer literal to p*
但是我们可以像这样将 NULL 分配给 p:
p = NULL;
确实,NULL 是一个值为 0 的宏,在编译器编译此代码之前,它被前驱替换为 0。所以更换后的样子
p = 0;
我知道这意味着 p 不指向任何东西,但根据规则我们只能将地址分配给指针,但 0 是一个整数。 所以这不是违反规则吗?
谢谢。
【问题讨论】:
-
我认为常量 0 始终是空指针。
-
@barakmanos 实际上你正在将 1 类型转换为 int* 但没有将整数分配给 p
-
C 和 C++ 的答案不同。你不能同时用两种语言编程,选择一种。
-
@DevSolar 不仅仅是演员表。 NULL 的定义在两种语言中是不同的,尤其是考虑到 C++11 时。