如果我以这种方式在函数中声明静态变量:
static int i=4;
//custom code
i++;
它按预期工作,即它在函数调用中维护变量值。
但是如果我这样声明:
static int i;
i=4;
//custom code
i++;
它不会跨调用维护该值,而像局部变量一样工作。
这是否意味着'i'不再是函数内部的静态变量?这种行为背后的原因是什么?
extern
关键字也有类似的情况
它在函数调用中保存它的值,但是当您像这样分配变量时:
static int i=4;
只赋值一次。当你这样做的时候:
static int i;
i=4;
它的意思是:'创建一个变量一次。每次函数运行时,将4
赋值给它。
一个小演示:ideone
初始化(第一个代码)与赋值(第二个代码)不同。
在第二段代码中,它在函数调用中也保持其值,但随后它被赋值为另一个值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++;
}
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.
初始化和赋值是不同的在第一步中,通过赋值进行初始化在第二种情况下你赋值
如果变量是静态的,初始化只做一次,赋值可以多次进行
这就是为什么在第一种情况下,值是持久的b/n不同的调用