您好,欢迎来到测品娱乐。
搜索
您的当前位置:首页c语言中static的应用

c语言中static的应用

来源:测品娱乐

一.static可以修饰的内容

static可以修饰变量和函数
1.修饰局部变量—称为静态局部变量
2.修饰全局变量—称为静态全局变量
3.修饰函数—称为静态函数

1.static修饰局部变量

例:
void test()
{
int a=5;
a++;
printf("%d ",a);
}
int main()
{
int i=0;
while(i<10)
{
test();
i++;
}
}
结果是6 6 6 6 6 6 6 6 6 6

当static修饰局部变量后
void test()
{
static int a=5;
a++;
printf("%d ",a);
}
int main()
{
int i=0;
while(i<10)
{
test();
i++;
}
return 0;
}
结果是6 7 8 9 10 11 12 13 14 15

原因是static修饰局部变量的时候,局部变量就变成了静态的局部变量,出了局部的范围不会销毁,下一次进入函数依然存在,是因为static修饰的局部变量是存储在静态区的,放在静态区的变量出了作用域是不销毁的。
static修饰局部变量时实际改变的是变量的存储位置,本来一个局部变量是存储在栈区的,被static修饰后放在了静态区,从而导致出了作用域依然存在,生命周期并没有结束。

补充:
在第一个文件中写:
int g_val=2022;(全局变量)
在第二个文件中写:
int main()
{
printf(“%d\n”,g_val);
return 0;
}
结果会报错:g_val是未声明的标识符
应该写为:
extern int g_val;
int main()
{
printf(“%d\n”,g_val);
return 0;
}
extern是用来声明外部符号的

2.static修饰全局变量

第一个文件中写:
static int g_val=2022;(全局变量)
第二个文件中写:
extern int g_val;
int main()
{
printf(“%d\n”,g_val);
return 0;
}
结果会报错:无法解析的外部符号g_val

原因是一个全局变量本来具有外部链接属性,但被static修饰后,外部链接属性就变成了内部链接属性,只能在自己的源文件内部使用,不可以在其他文件内部使用。

对于函数来说同理:
第一个文件:
int Add(int x,int y)
{
int z=x+y;
return z;
}
第二个文件:
int main()
{
int a=10;
int b=20;
int ret=Add(a,b);
printf(“%d\n”,ret);
return 0;
}
结果会提示Add未定义
解决方法是第二个文件开头应加extern int Add(int x,int y);用来声明来自外部的函数

当第一个文件改为:
static int Add(int x,int y)
{
int z=x+y;
return z;
}
结果会报错:无法解析的外部符号Add

原因是一个函数本来是具有外部链接属性的,但被static修饰后,外部链接属性就变成了内部链接属性,这时这个函数只能在自己所在的源文件内部使用,其他文件无法使用。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- cepb.cn 版权所有 湘ICP备2022005869号-7

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务