这个毫无意义的问题是关于指针的,有人能给我指出正确的方向吗
变量的地址是否可以合法地分配值 0x000000,如果可以,这是否意味着例如:
#define NULL 0x00000000
int example;
int * pointerToObject = &example;
if(pointerToObject != NULL)
会返回 false 吗?
最佳答案
不,您不能获得一个有效的(=非空)指针 p
,对于它 p != NULL
返回 false
。
但是请注意,这并不意味着任何关于“地址 0”的内容(无论它是什么意思)。当提到地址和指针时,C++ 有意非常抽象。有一个空指针值,即不指向任何地方的指针值。创建这种指针的方法是将一个空指针常量赋给一个指针变量。在 C++03 中,空指针常量是字面量 0
,可选择带有后缀(例如 0L
)。 C++11 添加了另一个空指针常量,字面量 nullptr
。
如何在内部表示空指针值超出了 C++ 语言的范围。在某些(大多数?)系统上,地址值 0x00000000
用于此目的,因为用户程序可以指向的任何内容都不能合法驻留在该地址。但是,没有什么可以阻止硬件平台使用值 0xDEADBEEF
来表示空指针。在这样的平台上,这段代码:
int *p = 0;
必须编译为将值 0xDEADBEEF
分配给变量 p
占用的 4 个字节。
在这样的平台上,您可以合法地获得指向地址 0x00000000
的指针,但它不会等于 0
,NULL
或 nullptr
。
另一种看待这个问题的方式是下面的声明不是等价的:
int *p = 0;
int *q = reinterpret_cast<int*>(0);
p
被初始化为空指针值。 q
用地址 0
初始化(当然取决于 reinterpret_cast
中使用的映射)。
关于c++ - 指针是否可能指向地址 0x000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934896/