C++什么是NULL指针值?

Sel*_*rio 2 c c++ null

我最近看到一篇文章提到C/C++中的空指针实际上不是简单的零,而是由编译器解释为平台的任何分配地址为null.

/sf/answers/193212071/

这与我在Visual Studio中调试c ++时所看到的内容相关,其中指针的值为0xCACACACA(或类似的东西),当它是一个错误的指针时(但这可能只是为了我们的利益显示的值).

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

编辑:

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

int i = 0;

// pretend to do some stuff with i

char* = (char*)i;
Run Code Online (Sandbox Code Playgroud)

编译器会在运行时将指针设置为null还是将其设置为零?如果确实如此,后者就是UB?它会打破这个计划吗?

Luc*_*ore 7

0xCACACACA由Visual Studio生成,通常那里没有初始化的指针,正是这个原因.当你看到这个,你知道出了什么问题.如果将其初始化为0,则很可能是预期的行为.这只在调试节点中完成,通过完全优化,未初始化指针的值将只是垃圾.

是的,NULL指针没有0每个人的价值.0只是一个文字.实际值可能不同.但是编译器足够聪明,可以将其抽象出来,所以即使你有一个NULL指针,其值实际上不是0(如数字0),将它与之比较0或者NULL仍然会产生真值.最好从nullptr真实的角度思考问题.