C语言中的静态存储类



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

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不同的调用

相关内容

  • 没有找到相关文章

最新更新