static的作用
1.修饰局部变量
static 修饰局部变量 改变了变量的生命周期-变长
void test()
{
int a = 1;//a局部变量
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
运行结果
static修饰局部变量a:生命周期在整个函数
void test()
{
static int a = 1;//a局部变量
a++;
printf("%d", a);
}
int main()
{
int i = 0;
while (i < 10)
{
test();
i++;
}
return 0;
}
运行结果
2.修饰全局变量
static修饰全局变量,改变了全局变量的作用域-变小了。
static修饰的全局变量只能在自己所在的.c文件中使用,不能在其他源文件中使用。
extern int g_val;//extern是声明外部符号的
int main()
{
printf("g_val=%d\n", g_val);
return 0;
}
创建新源文件定义全局变量g_val
static int g_val = 2020;
运行结果:
error LNK2001: 无法解析的外部符号 _g_val
此时去掉变量g_val的修饰字static
int g_val = 2020;
运行成功:
3.修饰函数
static修饰函数时,与修饰全局变量相同,static修饰的函数只能在本源文件内使用,不能在其他源文件使用。
extern int Add(int x, int y);
int main()
{
int a = 10;
int b = 20;
int sum = Add(a, b);
printf("%d", sum);
return 0;
}
创建新的源文件,定义函数
static Add(int x, int y)
{
int z = x + y;
return z;
}
运行结果:error LNK2019: 无法解析的外部符号 _Add,该符号在函数 _main 中被引用
去掉static关键字
Add(int x, int y)
{
int z = x + y;
return z;
}
extern int Add(int x, int y);
int main()
{
int a = 10;
int b = 20;
int sum = Add(a, b);
printf("%d", sum);
return 0;
}
运行结果: