在您的递归调用中printf(),当main()返回时执行。并且因为var它static variable的值保持不变0(所有函数调用的最后一个值 = 0 相同)
注意if()条件 false 何时var变为0(最后一个值,在 main() 之后;调用你不要更改 var - 注意图)。
希望下图能帮助您理解(阅读评论):
main() <---------------+
{ |
static int var=5; | <----"Declared only one/first time with value 5"
if(--var) |
---- main(); ---------+ // called if var != 0
| // main called for var = 4, 3, 2, 1
|// recursion stooped
|// return with 0 value
|// now no operation applied on `var` so it remain 0
+--> printf(" %d ",var); // called when return ed
}
静态函数的剩余寿命是直到程序终止(因此值不会丢失),并且作用域在函数内。
14.1.6 静态变量
静态自动变量的作用域与自动变量的作用域相同,即在定义它的块中是局部的;但是,分配的存储空间在程序执行期间将变为永久性的。静态变量可以在它们的声明中初始化;但是,初始化器必须是常量表达式,并且初始化只在编译时为静态变量 * 分配内存时进行一次。
第二个问题:
如果您再次使用var--,那么您的输出将是-1 -1 -1 -1 -1 -1?
假设您的条件是var--then if()condition 拳头检查true还是false在 decrement 之前--。(因为在表达式中var--,--是后缀)。
并且因为在==if()时中断,然后递归调用停止并且函数以从to递减的值返回。并且因为返回后不会改变,因此输出适用于所有人。 var00-1var-1