不了解C中static int的功能

Not understanding the function of static int in C

我正在尝试理解这段代码,但我不知道为什么静态变量的数量有时会变化,有时不会。

#include <stdio.h>
int func1 (int x)
{
    extern int a;
    static int y=0;
    printf("%d\n%d\n",a,y);
    a=x+5; y=x+1;
    {int y=10; printf("%d\n",y);}
    return y;
}
int a;
int main()
{
    a=func1(1);
    printf("%d\n",a);
    {
        int a=1;
        printf("%d\n", a);
    }
    a=func1(a);
    printf("%d",a);
    return 0;
}

这是输出:

0

0

10

2

1

2

2

10

3

起初,当a = func(1)为运行时,y声明为0,然后变为2并打印2.但是当 运行s a = func(a)a2 时,我预计 y 会通过 static int y = 0 变成 0 但是 y 没有变化。为什么它没有发生?

静态对象在创建时在概念上被初始化。

静态对象的生命周期从程序开始执行开始,一直持续到执行结束。

所以,当程序开始执行时,y被初始化为0。之后,它的值只有在被修改时才会改变,就像赋值语句一样。定义它的语句,static int y = 0;,初始化后不修改它。

在函数内部声明为 static 的变量在程序的整个生命周期内保持其值,即使变量名称超出范围。 static 变量的初始值设定项 在程序启动时应用。

所以当程序启动时,y 被初始化为 0。然后在第一次调用 func 时它设置 y 为 2。这个值在函数执行后仍然保留出口。所以当func被第二次调用时,函数启动时y仍然是2。

static 意味着你只有一个变量的共享值,你可以想象它被声明为一个全局变量,在多个函数调用之间保持它的值。

您第一次使用 x = 1 调用 funct1,所以 y 返回为 2。 下次调用 x = 2 的函数 func1 时,y 的值将不会再次声明,而是使用上次调用的最后一个值(y = 2),并将 y = x + 1 更新为 3。

TLDR; 只读一次变量的静态声明(static int y = 0),不要再返回它,下次使用它的最后一个值。