我无法理解这个程序的输出 -
int main()
{
static int i=5;
if(--i) {
main();
printf("%d ",i);
}
}
输出为0 0 0 0
我怀疑为什么在第一次调用main时不会初始化静态? 如果我假设静态的输出在第一次调用5中初始化,然后在调用之间共享应该是4 3 2 1
谢谢!
答案 0 :(得分:1)
在调用任何main()
语句之前,对printf()
的调用将被递归调用4次。到第一个printf()
被调用时,--i
被递归调用了4次。由于i
是静态的,因此该点的值为0,这是打印的值。
答案 1 :(得分:0)
如果您不选择i
为static
,则该计划将无法拨打main()
,因为在每次通话中都会有新的i
值为5.再次调用main()
时,printf()
语句被压入堆栈,稍后当i
变为0时,所有printfs都会打印i的值,即0。