经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C 语言 » 查看文章
c语言static关键字用法详解
来源:jb51  时间:2022/1/17 10:43:18  对本文有异议

1.static修饰全局变量

我们创建两个源文件,一个test.c,一个main.c

现在我们在test.c文件下定义一个全局变量

  1. int g_val = 100;

我们在main.c下进行调用打印g_val我们能访问到g_val吗?

答案是可以的

如果给g_val加上static修饰我们还能再main.c下访问到吗?

  1. 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修饰局部变量

  1. void fun()
  2. {
  3. int i = 0;
  4. i++;
  5. printf("i = %d\n", i);
  6. }
  7. int main()
  8. {
  9. for (int i = 0; i < 10; i++)
  10. {
  11. fun();
  12. }
  13. }

你知道这段代码,它的运行结果是什么吗?

通过结果我们发现他打印了10个1,其中,i是局部变量,具有临时性,函数调用时开辟空间并初始化,函数结束释放空间。

那么如果我们static修饰局部变量,即给int i  = 0;前static所修饰,结果还会一样吗?

  1. void fun()
  2. {
  3. static int i = 0;
  4. i++;
  5. printf("i = %d\n", i);
  6. }
  7. int main()
  8. {
  9. for (int i = 0; i < 10; i++)
  10. {
  11. fun();
  12. }
  13. }

 答案当然是不一样的, 我们发现,结果变成了1-10。因此我们可以得到第三个结论。

分析:

结论3:static修饰局部变量,更改该局部变量的生命周期。

生命周期:将临时变量的生命周期变成全局变量的生命周期。

作用域不变:作用域仍然是代码块内。

总结:

static:

结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。

结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问。但是可以通过嵌套的方式调用,变相的封装的表现。

结论3:static修饰局部变量,更改该局部变量的生命周期。
生命周期:将临时变量的生命周期 -- 全局变量的生命周期。
作用域不变:作用域仍然是在本代码块内。

到此这篇关于c语言static关键字用法详解的文章就介绍到这了,更多相关c语言static关键字内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号