【发布时间】:2020-11-01 04:56:54
【问题描述】:
我发现,为了打印 not initialized 指针的任意地址,代码是:
#include <stdlib.h>
#include <stdio.h>
int main()
{
int x = 1;
int *pi0;
int *pi = NULL;
int *pi2 = &x;
int *pi3;
int **ppi;
printf("Indirizzo pi0: \t %p\n", pi0); // 0x55e43192a080
printf("Indirizzo pi: \t %p\n", pi); // (nil)
printf("Indirizzo x: \t %p\n", &x); // 0x7ffdb8405f44
printf("Indirizzo pi2: \t %p\n", pi2); // 0x7ffdb8405f44
printf("Indirizzo pi3: \t %p\n", pi3); // 0x7ffe56ffe6b0
printf("Indirizzo pi3: \t %p\n", ppi); // ???
return 0;
}
我的目标是对 not initialized 指向指针的指针执行相同操作,但是,正如您在最后一个 printf 中看到的那样,如果我尝试打印 ppi 的地址,什么也不会发生(没有警告,没有错误,没有输出)。
编辑:代码有效,我在最后一个 printf 中犯了一个错误,因为我写的是 pi3 而不是 ppi。
【问题讨论】:
-
使用未初始化的变量(包括指针)是UB。通常未初始化的变量会从内存中获取随机垃圾作为值。
-
我收到
0x0的最后一个。 -
我得到
0x0所有未初始化的指针。 -
将文字改为
"Indirizzo ppi" -
但正如@Jorengarenar 所说,使用未初始化的变量会导致未定义的行为。没有理由期望它打印任意值。