如果我以这种方式在函数中声明一个静态变量:
static int i=4;
//custom code
i++;
它按预期工作,即它在函数调用中保持变量值。
但如果我声明如下:
static int i;
i=4;
//custom code
i++;
它不是在调用之间保持值,而是像局部变量一样工作。
这是否意味着'我'函数内部不再是静态变量?这种行为背后的原因是什么?
extern
关键字会出现类似情况。
答案 0 :(得分:4)
它在函数调用中保存了它的值,但是当你分配这样的变量时:
static int i=4;
只分配一次。当你这样做时:
static int i;
i=4;
表示:'创建一次变量。每次函数运行时都为其分配4
。'。
一个小型演示:ideone
答案 1 :(得分: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++;
}
答案 2 :(得分: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.
答案 3 :(得分:0)
初始化和赋值都不同 在第一步中,您将通过分配进行初始化 在第二个你正在分配
如果变量是静态的,则初始化完成一次,分配可能是多次
这就是在第一种情况下值是持久的原因b / n不同的调用