C中未初始化指针的值

Sim*_*imo -4 c pointers initialization

假设我们在C中具有以下声明:

double d[25], * p;
int * t;
char * c;
Run Code Online (Sandbox Code Playgroud)

我们如何解释以下printf()结果?

printf("d : %x\t",d);
printf("p : %x\t",p);
printf("t : %x\t",t);
printf("c : %x\t",c);
Run Code Online (Sandbox Code Playgroud)

哪个打印ligne:

d : 62fd30    p : 1    t : 0    c : 39    
Run Code Online (Sandbox Code Playgroud)

我们可以很清楚地看到d的内存地址,但p,t和c看起来都不像地址。我曾经认为,未初始化的指针在声明后采用Null值。我错了吗?我们如何解释这些结果?

Som*_*ude 5

默认情况下,所有自动(非静态局部)变量都将使用不确定的值(可能看起来像随机值或垃圾值)进行未初始化。变量是否是指针都没有关系。

另外,仅读取未初始化指针的值并不会自动UB(在C语言中),但是绝对取消引用未初始化指针是可以的。

但是,正如在一条评论中提到的那样,您需要使用它"%p"来打印指针(从技术上讲,也需要将其强制转换void *为指针)。printf格式说明符和参数类型匹配导致UB。

  • 嗯,实际上您是对的,但是从理论上讲,读取指针可能是UB(还记得trap-representation-thingie吗?) (3认同)
  • @Someprogrammerdude *我们中很少有人会在指针不是简单整数的系统上工作*令人讨厌的是,[我们中很少有人**还没有**。](https:// en .wikipedia.org / wiki / Real_mode);-) (2认同)