关于未初始化指针指向任何地方这一事实的困惑

#include  int main(void) { int *ptr; printf("%p", ptr); // Error: uninitialized local variable 'ptr' used // Output is "0" } 

我正在阅读有关空指针的C-FAQ 。 它说未初始化的指针可能指向任何地方。 这是否意味着它指向内存中的随机位置? 此外,如果此声明为真,如果我尝试printf("%p",ptr) ,为什么会出现错误? 由于未初始化的指针ptr指向某个随机位置,似乎它必须打印出这个随机位置!

单位化auto变量(指针类型或其他)的内容是不确定的 ; 实际上,它是最后写入该内存位置的内容。 此随机位模式对应于程序中有效地址1的几率非常低; 它甚至可能是一个陷阱表示 (一种与该类型的合法值不对应的位模式)。

尝试取消引用无效指针值会导致未定义的行为; 任何结果都是可能的。 您的代码可能会彻底崩溃,它可能在没有明显问题的情况下运行,可能会使您的系统处于不良状态。


  1. 也就是说,程序中定义的对象或函数的地址,或者使用malloc或类似函数分配的动态对象。