static修饰变量,该变量空间独立于函数中的auto变量或栈变量,它在内存的静态区分配;
一般来说局部变量存放在栈区;其生命周期随语句块执行结束而结束;用static修饰,该变量就放在内存静态数据区;
其生命周期持续到整个程序结束为止;虽然其变量的生命周期与存储位置变化,但作用域没有改变;
用static修饰局部变量,该变量初始化只在程序初次运行时执行一次,且只执行一次。
若静态局部变量没有初始化,系统会自动赋值为0,字符型数组会自动赋值为'\0'
void f()
{
static int a = 0;
a++;
printf("%d\n",a);
}
int main()
{
f();
f();
return 0;
}
结果:1,2《static只能初始化一次,生命周期随整个程序结束》
对于全局变量;它可在本源文件中访问,也可在同一工程的其他源文件中访问(加上extern声明)
f1.c
int a = 1;
f2.c
extern int a;
int main()
{
printf("%d\n",a);
return 0;
}
但若用static修饰时,static int a = 1;f2.c 将无法访问;因为该全局变量仅本源文件可见。
static 修饰函数与全局变量相似