我正在学习C并在网站上发现了类似的问题。http://www.careercup.com/question?id=5707884834848768
我试着通过编写自己的程序来理解它
int main()
{
int i;
printf("%d\n", i);
int *ptr = &i;
int**ptr2= &(ptr);
return 0;
}
当两个指针分配被注释掉时,该程序的输出在每次执行时都是随机垃圾值。 如果取消注释第一个指针赋值,则输出始终为固定值(134513705)。 如果我取消注释第二个指针赋值,则输出始终为0.
我试图通过对a.out
使用size命令来理解它文本数据bss dec
1141 252 8 1405
1157 256 8 1421
1157 256 8 1421
因此,即使在第2和第3种情况下数据值相同,输出也是不同的。 为什么输出在三种情况下具有不同的值?
答案 0 :(得分:0)
从评论中可以看出,该程序的预期输出未定义。原因是变量i从未初始化。注释掉或添加回指针声明是一个红色的鲱鱼。你的printf语句呈现'i'在找到的任何状态下使用的内存。在ideone.com上运行此输出0,无论我评论或评论哪些行。可能这是因为它们在代码执行之前清除了内存。您甚至可以使用不同的编译器选项更改输出。需要注意的是,未初始化的变量是未初始化内存的视图,并且没有定义的值。