C++ 什么是 NULL 指针值?

标签 c++ c null

我最近看到一篇文章提到 C/C++ 中的空指针实际上不只是零,而是被编译器解释为平台的空分配地址。

https://stackoverflow.com/a/2760172/2027262

这与我在 Visual Studio 中调试 C++ 时看到的情况有关,其中指针的值为 0xCACACACA(或类似的东西),而它是一个错误的指针(但这可能只是为了我们的利益而显示的值)。

长话短说,一个平台(比如windows)的真实空指针地址是什么?还是我完全误解了答案?

编辑:

此外,(作为扩展)这是做什么的?

int i = 0;

// pretend to do some stuff with i

char* = (char*)i;

编译器会在运行时将指针设置为空还是将其设置为零?如果确实如此,后者是那个 UB?它会破坏程序吗?

最佳答案

Visual Studio 生成的 0xCACACACA 通常用于未初始化的指针,正是出于这个原因。当你看到这个,你就知道出事了。如果将它初始化为 0,这很可能是预期的行为。这仅在调试节点中完成,通过完全优化,未初始化指针的值将只是垃圾。

是的,NULL 指针没有 0 的值。 0 只是一个文字。实际值可能不同。但是编译器足够聪明,可以将其抽象出来,所以即使你有一个 NULL 指针,其值实际上不是 0(如数字 0),将它与 0NULL 进行比较 仍然会产生 true。最好从 nullptr 的角度来考虑。

关于C++ 什么是 NULL 指针值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16828929/

相关文章:

c - 删除动态内存分配 - 从嵌入式 C 程序

c - OpenSSL DTLS 连接从未建立

java - 在空引用上创建方法引用不会引发异常

c++ - CUDA素数生成

ios - 通过 prepareForSegue 传递 JSON 值的问题

java - 如何检查变量是否为空?

c++ - GLM 角度轴错误?

c++ - HASH 函数和实现多键 HashMap

c++ - 为什么编译器不在 Derived 类构造函数的定义中提示?

c++ - 调用 gluPerspective 和 gluLookAt 给我一个 undefined reference ?