我最近看到一篇文章提到C/C++中的空指针实际上不是简单的零,而是由编译器解释为平台的任何分配地址为null.
这与我在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?它会打破这个计划吗?
在0xCACACACA由Visual Studio生成,通常那里没有初始化的指针,正是这个原因.当你看到这个,你知道出了什么问题.如果将其初始化为0,则很可能是预期的行为.这只在调试节点中完成,通过完全优化,未初始化指针的值将只是垃圾.
是的,NULL指针没有0每个人的价值.0只是一个文字.实际值可能不同.但是编译器足够聪明,可以将其抽象出来,所以即使你有一个NULL指针,其值实际上不是0(如数字0),将它与之比较0或者NULL仍然会产生真值.最好从nullptr真实的角度思考问题.