C中的静态存储类

时间:2014-05-28 07:28:54

标签: c storage-class-specifier

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

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

它按预期工作,即它在函数调用中保持变量值。

但如果我声明如下:

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

它不是在调用之间保持值,而是像局部变量一样工作。

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

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

4 个答案:

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