static —最名不副实的关键字
目录
static的作用:
1.static修饰全局变量
我们创建两个源文件,一个test.c,一个main.c
现在我们在test.c文件下定义一个全局变量
int g_val = 100;
我们在main.c下进行调用打印g_val我们能访问到g_val吗?
答案是可以的
如果给g_val加上static修饰我们还能再main.c下访问到吗?
static int g_val = 100;
这时候答案是不行的!
因此我们得到了static的第一个结论
结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。
2.static修饰函数
我们在test.c文件下写一个show()函数,请问在main.c文件能调用吗?
答案是可以的。
那这时候给show()函数加上static,main.c下还能调用该函数吗?
答案是不可以的!因此我们可以得到第二个结论
结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问,但是可以通过嵌套的方式调用,变相的封装的表现。
但是我们可以通过函数嵌套调用的方式调用show函数。
什么意思呢?就是在show函数的相同文件内创建一个新的函数,调用show函数,我们再在main.c文件下调用这个新的函数,已达到调用show()函数的目的。
例:我们创建一个show_helper函数,来调用static修饰的show函数,我们再在main.c文件内调用show_helper函数。
结果:
通过嵌套的方式调用,变相的封装的表现。
因此static项目维护,可以提供安全保护。被static修饰,主要限制的是作用域。
3.static修饰局部变量
void fun()
{
int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}
你知道这段代码,它的运行结果是什么吗?
通过结果我们发现他打印了10个1,其中,i是局部变量,具有临时性,函数调用时开辟空间并初始化,函数结束释放空间。
那么如果我们static修饰局部变量,即给int i = 0;前static所修饰,结果还会一样吗?
void fun()
{
static int i = 0;
i++;
printf("i = %d\n", i);
}
int main()
{
for (int i = 0; i < 10; i++)
{
fun();
}
}
答案当然是不一样的, 我们发现,结果变成了1-10。因此我们可以得到第三个结论。
分析:
结论3:static修饰局部变量,更改该局部变量的生命周期。
生命周期:将临时变量的生命周期变成全局变量的生命周期。
作用域不变:作用域仍然是代码块内。
总结:
static:
结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。
结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问。但是可以通过嵌套的方式调用,变相的封装的表现。
结论3:static修饰局部变量,更改该局部变量的生命周期。
生命周期:将临时变量的生命周期 — 全局变量的生命周期。
作用域不变:作用域仍然是在本代码块内。
今天的文章c语言static关键字的用法_c语言关键字一览表分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:http://bianchenghao.cn/76360.html