我无法理解这个程序的输出-
int main()
{
static int i=5;
if(--i) {
main();
printf("%d ",i);
}
}
输出为0 0 0 0
我的疑问是,为什么在对main的第一次调用中不初始化static?如果我假设static在第一次调用5时初始化,然后在调用之间共享,那么输出应该是4 3 2 1
谢谢!
在调用任何printf()
语句之前,对main()
的调用将递归调用4次。当第一个printf()
被调用时,--i
已经被递归调用了4次。由于i
是静态的,因此它在该点的值为0,这就是打印的值。
如果不选择i
作为static
,程序将陷入对main()
的无限调用中,因为在每次调用中,都会有值为5的新i
。当再次调用main()
时,printf()
语句被推送到堆栈上,稍后当i
变为0时,所有printfs都打印i的值,即0。