这是程序:
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
printf("%d\n", j);
}
我编译并运行它,输出是:
888086464
0
但是,如果我注释掉第二个 printf
#include <stdio.h>
main() {
int * i;
int * j;
printf("%d\n", i);
//printf("%d\n", j);
}
输出beomes:
0
我想知道为什么第二个 printf 会更改指针 i。
而且,C 是如何初始化指针的?据我所知,如果指针未初始化,它的值 Null 将等于 0,对吗?为什么在第一个输出中, i 被初始化?
编辑:根据你们的建议,我做了一些改变:
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
printf("%p\n", j);
}
这使
0x7fff67a361b0
(nil)
但是当我注释掉第二个 printf
#include <stdio.h>
main() {
int * i;
int * j;
printf("%p\n", i);
//printf("%p\n", j);
}
输出为零。我很好奇为什么在有两个 printf 的第一个版本中,只有 j 是 nil 而 i 不是。