目录
1.static修饰局部变量
先来看两段代码:
void test()
{
static int a = 1;
++a;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i<10)
{
test();
i++;
}
return 0;
}
结果为2 3 4 5 6 7 8 9 10 11
void test()
{
int a = 1;
++a;
printf("%d ", a);
}
int main()
{
int i = 0;
while (i<10)
{
test();
i++;
}
return 0;
}
结果为222222222
两段代码的区别就是int i前面的static
static关键字修饰局部变量时,改变了变量的存储类型,普通的局部变量存储在栈区,被static修饰的变量存储在静态区,存储在静态区的变量,出了作用域不会销毁,依然存在,所以静态区的生命周期就是程序的生命周期,程序结束时静态变量回收空间。
生命周期变长,作用域不变。
2.static修饰全局变量
注:extern声明外部符号
3.static修饰函数
修饰函数与修饰全局变量十分相似
函数本身是具有外部链接属性,如果static修饰函数,函数的外部链接属性就变成了内部链接属性,这个函数只能在自己所在的源文件内部使用,其他源文件无法使用该函数