【发布时间】:2013-03-12 16:20:59
【问题描述】:
这是程序:
#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 不是。
【问题讨论】:
-
除了使用未初始化的数据(未定义)之外,您还使用
%d格式传递指向printf()的指针,这也是未定义的。最好使用%p或从指针显式转换为int。