我正在重新审视静态修饰符概念,我想知道为什么这是输出:
this is main()
i is 6
i is 43
i is 44
i is 43
代码如下:
// Example program
#include <iostream>
#include <string>
#include <cstdio>
void func()
{
static int i = 5;
printf("i is %d\n", ++i);
i = 42;
printf("i is %d\n", ++i);
}
int main()
{
puts("this is main()");
func();
func();
return 0;
}
我知道静态意味着每个实例一个变量(至少在Java中)。因此,我理解输出的前三行,但是为什么静态int
变量向右跳回到值为44然后......它向后跳,最后一个值为43?
我会假设当第一个函数调用结束时,静态变量超出范围,但事实并非如此。它不会被重新分配为5的值。我可能会在这里看到一些非常明显的东西,但我根本就不明白。
答案 0 :(得分:1)
static int i = 5;
...仅在第一次通话时执行。但
i = 42;
每次拨打i
时, ...将42
的值设为func()
。