不了解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)
当 a
是 2
时,我预计 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),不要再返回它,下次使用它的最后一个值。
我正在尝试理解这段代码,但我不知道为什么静态变量的数量有时会变化,有时不会。
#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)
当 a
是 2
时,我预计 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),不要再返回它,下次使用它的最后一个值。