gpt4 book ai didi

C++ 什么是 NULL 指针值?

转载 作者:太空狗 更新时间:2023-10-29 23:36:21 24 4
gpt4 key购买 nike

我最近看到一篇文章提到 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com