为什么静态修饰符输出通过函数调用不一致?

时间:2018-03-30 17:55:12

标签: c++

我正在重新审视静态修饰符概念,我想知道为什么这是输出:

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的值。我可能会在这里看到一些非常明显的东西,但我根本就不明白。

1 个答案:

答案 0 :(得分:1)

static int i = 5;

...仅在第一次通话时执行。但

i = 42;
每次拨打i时,

...将42的值设为func()