C中未初始化的局部变量

时间:2013-11-19 19:25:08

标签: c initialization

我正在学习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种情况下数据值相同,输出也是不同的。   为什么输出在三种情况下具有不同的值?

1 个答案:

答案 0 :(得分:0)

从评论中可以看出,该程序的预期输出未定义。原因是变量i从未初始化。注释掉或添加回指针声明是一个红色的鲱鱼。你的printf语句呈现'i'在找到的任何状态下使用的内存。在ideone.com上运行此输出0,无论我评论或评论哪些行。可能这是因为它们在代码执行之前清除了内存。您甚至可以使用不同的编译器选项更改输出。需要注意的是,未初始化的变量是未初始化内存的视图,并且没有定义的值。