2

如果我以这种方式在函数中声明一个静态变量:

static int i=4; //custom code i++;

它按预期工作,即它在函数调用之间维护变量值。

但如果我声明如下:

static int i; i=4; //custom code i++;

它不会在调用之间维护值,并且像局部变量一样工作。

这是否意味着“i”不再是函数内部的静态变量?这种行为背后的原因是什么?

extern关键字也会出现类似的情况。

4

4 回答 4

4

它在函数调用中保存它的值,但是当您分配这样的变量时:

static int i=4;

它只分配一次。当你这样做时:

static int i;
i=4;

它的意思是:'创建一个变量一次。4每次函数运行时分配给它。'。

一个小演示:ideone

于 2014-05-28T07:33:49.880 回答
3

初始化(第一个代码)与赋值(第二个代码)不同。

在第二个代码中,它确实在函数调用中保持其值,但随后它被分配给另一个值4

void foo()
{
    static int i;
    // i remains its value from the last call
    i=4;    //here it's assigned to 4
    //custom code
    i++;
}
于 2014-05-28T07:31:49.220 回答
0
In your second code statement you are overwriting the value of i. 
that is why it seems to work like local variable. 
It is not though.
于 2014-05-28T07:34:37.073 回答
0

初始化和赋值都不同在第一步中,您通过在第二步中分配来进行初始化

如果一个变量是静态的,初始化只进行一次,赋值可能是多次

这就是在第一种情况下,值是持久的 b/n 不同调用的原因

于 2014-05-28T09:21:45.290 回答