void foo()
{
int i;
printf("%d",i++);
}
int main()
{
int j;
for(j=0;j<10;j++)
{
foo();
}
}
代码的输出是一系列10个随机但连续的数字。我想知道如果每次都初始化i并且我的存储类也是auto时怎么办?还会在每次调用foo()时重新分配其堆栈框架吗?还是相同的堆栈框架?
如注释中所述,您没有显示递归函数调用。
无论如何,auto
变量不会自动初始化,它们包含垃圾。这些变量通常通过快速堆栈操作在堆栈中分配。在foo()中,您具有这样的变量,因此printf输出随机数据。
即使递归调用了foo()函数,自变量问题仍然存在,每次调用都会产生一个包含垃圾的新stack frame
。