前言:C语言中有许多关键字(关键字是预先保留的标识符,具有特殊意义,不能用作变量
名、函数名等普通标识符。)比如:前面在变量与常量那一节提到的extern 就是一个关键字,应该还记得extern是 干什么的吧(坏笑)。
今天,杰哥给大家带来的是关键字static作用 的小小的知识汇总。
static(静态存储类型)的作用
一、修饰局部变量
在函数内部,使局部变量具有静态存储期。变量只会初始化一次,在函数多次调用间保留其值。
首先,先小小地看一下这张图:
诸侯崛起,逐鹿中原,多年纷争,三分天下。
———— “局部变量”在栈区 (变量的生命周期较短)
————“全局变量”在静态区 (变量的生命周期较长)
那么,以上这张图能和static 有什么关系呢?
———— static 能使得 局部变量从栈区移到静态区,从而改变变量的生命周期。示例如下:
(1、以下调用了函数,函数呢 ? 不知道的话,可以先把函数理解成一个加工厂,而main 理解为公司总部,公司中的半成品要移到加工厂加工; 2、while是一种循环语句,用于在一定条件下的再次运行/重复操作)
——左图:每次调用并进入函数test ,a 每次都会重置(初始化都0)
——右图:a的值得以保留,直到程序结束
总的来说,变量的作用域(还是在test函数中)不变,但是生命周期变长了 。
二、修饰全局变量
限制全局变量的作用域,使其只能在定义它的源文件内使用,其他源文件无法直接访问。
示例如下:
前面,我们已经知道extern 用来声明外部变量,使得其它源文件的变量(外部变量)可以在本源文件中使用 。
这是因为:
- 全局变量本身是具有外部链接属性的。在A文件中定义的变量,在B文件中可以通过链接被使用。
但是:
- 如果全局变量被static修饰,这个外部链接属性就变成了内部链接属性,这个全局变量只能在自己所在的源文件内部使用。
三、修饰函数
类似修饰全局变量的作用,使函数只能在其定义的源文件内被调用,不能被其他源文件调用。
- 函数本身是具有外部链接属性的。
- 被static修饰后,外部链接属性就变成了内部链接属性,使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用 。
四、实操 (输出的答案下节公布)