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值。我错了吗?我们如何解释这些结果?
默认情况下,所有自动(非静态局部)变量都将使用不确定的值(可能看起来像随机值或垃圾值)进行未初始化。变量是否是指针都没有关系。
另外,仅读取未初始化指针的值并不会自动UB(在C语言中),但是绝对取消引用未初始化指针是可以的。
但是,正如在一条评论中提到的那样,您需要使用它"%p"来打印指针(从技术上讲,也需要将其强制转换void *为指针)。printf格式说明符和参数类型不匹配会导致UB。