我最近看到一篇文章提到 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;
编译器会在运行时将指针设置为 null 还是将其设置为零?如果是后者,那是UB吗?它会破坏程序吗?