static关键字的作用:
- 修饰局部变量
- 修饰全局变量
- 修饰函数
1.static修饰局部变量: 代码1:
#include <stdio.h>
void test()
{
int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i < 5; i++)
{
test();
}
return 0;
}
运行结果:
代码2:
#include <stdio.h>
void test()
{
static int i = 0;
i++;
printf("%d ", i);
}
int main()
{
int i = 0;
for(i=0; i < 5; i++)
{
test();
}
return 0;
}
运行结果:
局部变量的特点是:
- 进入函数局部变量被创建
- 函数结束局部变量被销毁
所以在代码 1 中的值并没有被累加。但是代码 2 种 static 修饰的局部变量进行了累加,意味着静态局部变量的生命周期变长了,并不局限于函数的开始创建,函数的结束而销毁。生命周期改变为在程序结束的时候该变量才会被销毁。
2.static修饰全局变量:
#include <stdio.h>
extern int g_val;
int main(){
printf("%d\n",g_val);
return 0;
}
#define _CRT_SECURS_NO_WARNINGS
int g_val = 10;
运行结果:
当以上代码加入static关键字后:
#define _CRT_SECURS_NO_WARNINGS
static int g_val = 10;
运行结果发生报错。 主要原因:被static修饰的全局变量,只能在当前源文件当中使用。简而言之,降低了该全局变量的可见性。
3.static修饰函数:
#include <stdio.h>
extern int g_val;
extern int Add(int x,int y);
int main(){
int ret = Add(1,2);
printf("%d\n",ret);
return 0;
}
#define _CRT_SECURS_NO_WARNINGS
static int g_val = 10;
int Add(int x,int y){
return x + y;
}
运行结果:
当以上代码加入static关键字后:
#define _CRT_SECURS_NO_WARNINGS
static int g_val = 10;
static int Add(int x,int y){
return x + y;
}
运行结果发生报错。 主要原因:被static修饰的全局变量,只能在当前源文件当中使用。简而言之,降低了该全局变量的可见性。