juliusun.com
第 30/50 节 冥河C语言教程
static可以描述局部变量,被描述的变量被称为静态局部变量,本节有时简称静态变量。
被static关键字描述的变量称作静态变量。static关键字用法简单,在函数或变量的类型名前加上static关键字,并用空白字符与类型隔开即可,如:static int i;
static描述局部变量时,被描述局部变量在程序运行时即被分配空间,而不是每次函数执行时,所以每次修改都会保存。
函数学习中,提到,局部变量作用范围不会超过所在的函数。函数每次执行,局部变量重新分配空间,函数退出后,空间收回,局部变量无效。每次执行函数,几乎与参数无关的局部变量值都是相等的。
用static修饰的局部变量,只会分配一次空间,函数退出也不会收回变量,每一次做的修改,下次都会保存,且变量仅能在定义的函数内访问。局部静态变量是程序运行开始,便已经分配了空间,程序结束,才会收回。
我们假设要实现一个功能,我们定义一个函数,统计这个函数被调用了多少次。
当然,如果代码简单,可以通过代码计算出来。假设大型项目,代码并不是一个人完成的,或是一个人完成的代码量过大,查看自己代码函数被调用次数,通过分析代码来完成,太麻烦,还要说函数调用次数不会随着用户输入等其它因素变量。
在函数中定义static修饰的静态局部变量解决这个问题,非常合适,即能保证函数执行退出不会干扰,又能保证私密性禁止其它函数调用。
下面以统计一个函数被调用多少次为例,同时输出非静态变量的值,加以对比,了解下静态局部变量:
效果类似如下图:
运行平台不同效果图有所差异。
很好理解了,static修饰的局部变量,相当于定义的是全局变量,只不过只有定义的函数,可以通过变量名访问而已。事实上,从底层上讲,对static修饰的变量的处理,除了符号仅允许定义函数内引用,其它的和全局变量均类似。