ary*_*rya 1 c linux static-variables
我有以下代码:
#include <stdio.h>
int f1()
{
static int s=10;
printf("s=%d\n",s++);
}
int main()
{
f1();
f1();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
s=10
s=11
Run Code Online (Sandbox Code Playgroud)
为什么static int s=10第二次忽略该行,何时f1被调用?
这不是任务,而是初始化程序.局部static变量仅在程序启动时初始化一次,如全局变量.即使在函数的调用之间,它们也保持最后的赋值.因此,在您第一次通话后,它会保留该值11.实际上,它们就像文件范围static变量一样,它们的名称仅在声明它们的块的范围内已知(但您可以通过指针传递它们).
缺点是它们只存在一次.如果从多个线程调用相同的函数,它们都共享同一个变量.
尝试第三个电话:你会得到12.
注意:初始化程序必须是常量表达式.尝试static int s = 10, t = s + 5;并阅读编译器错误消息.
静态变量的初始化是一次性的(初始化时间保证在第一次调用之前发生,这可能发生在编译时或运行时;依赖于编译器).这是使用它们的主要原因.