惧留孙网

juliusun.com

在线教程 > C语言教程 > static应用之局部

static应用之局部

第 30/50 节 冥河C语言教程


static可以描述局部变量,被描述的变量被称为静态局部变量,本节有时简称静态变量。

被static关键字描述的变量称作静态变量。static关键字用法简单,在函数或变量的类型名前加上static关键字,并用空白字符与类型隔开即可,如:static int i;

static描述局部变量时,被描述局部变量在程序运行时即被分配空间,而不是每次函数执行时,所以每次修改都会保存。

函数学习中,提到,局部变量作用范围不会超过所在的函数。函数每次执行,局部变量重新分配空间,函数退出后,空间收回,局部变量无效。每次执行函数,几乎与参数无关的局部变量值都是相等的。

用static修饰的局部变量,只会分配一次空间,函数退出也不会收回变量,每一次做的修改,下次都会保存,且变量仅能在定义的函数内访问。局部静态变量是程序运行开始,便已经分配了空间,程序结束,才会收回。

我们假设要实现一个功能,我们定义一个函数,统计这个函数被调用了多少次。

当然,如果代码简单,可以通过代码计算出来。假设大型项目,代码并不是一个人完成的,或是一个人完成的代码量过大,查看自己代码函数被调用次数,通过分析代码来完成,太麻烦,还要说函数调用次数不会随着用户输入等其它因素变量。

在函数中定义static修饰的静态局部变量解决这个问题,非常合适,即能保证函数执行退出不会干扰,又能保证私密性禁止其它函数调用。

下面以统计一个函数被调用多少次为例,同时输出非静态变量的值,加以对比,了解下静态局部变量:


  1. #include<stdio.h>
  2. void fun( ); //函数声明
  3. int main( )
  4. {
  5. for (int i = 0; i < 5; ++i)
  6. {
  7. fun( ); //调用5次,查看效果
  8. }
  9. getchar( ) ; //使程序暂停一下
  10. return 0;
  11. }
  12. void fun()
  13. {
  14. static int si = 0; //si的定义程序运行即执行,而不是函数调用时,起到作用类似是全局变量,但只允许本函数内通过符号引用
  15. int ai = 0; //此语句函数每次执行时才执行,每次执行ai都会重新分配空间和初始化,每次都是0
  16. ++si; //把si想象成全部变量,就明白他为什么一直在加1
  17. ++ai; //由于ai在函数每次执行时,初始值都是0,此句执行完,每次ai都是1
  18. printf("第%d次调用,静态局部变量si值为%d,非静态局部变量ai值为%d\n", si, si, ai);//输出信息方便查看
  19. }

效果类似如下图:

Pic

运行平台不同效果图有所差异。

很好理解了,static修饰的局部变量,相当于定义的是全局变量,只不过只有定义的函数,可以通过变量名访问而已。事实上,从底层上讲,对static修饰的变量的处理,除了符号仅允许定义函数内引用,其它的和全局变量均类似。

作者:冥河 QQ:3304576112
交流QQ群:554701039 C语言讲课群
本教程内容由本站保留版权,请勿复制传播
抖音
©2015-2024 惧留孙网 juliusun.com

京ICP备15039193号-1

首页 教程 下载 文章 聊天 我的