在这里介绍static在代码中的作用,如同其意,静态,在自动变量前加上static关键字后,会使这个变量的属性变为静态,但静态又是什么呢?
下面将说说Static关键字主要在两个方面的影响:
(1)static关键字用于修改标识符的链接属性(所谓链接属性可以分为三类:external(外部),internal(内部),none(无)这三种,external表示声明的变量在不同的源文件中都表示同一个变量或者实体;internal表示在同一源文件中的声明都表示同一变量或者实体,在不同的源文件中多个声明则表示不同的实体或者变量值;none总是被当作单独的个体,无论是同一源文件或者不同的源文件中),在全局变量声明中,默认是external属性,如果在前面加上static后,则链接属性变为internal,但存储类型和作用域不受影响(所谓存储类型就是类似存储在堆栈或者寄存器)
(2)当用于代码块内部变量声明时,static用于修改存储类型,将不存储于堆栈中,但链接属性和作用域不受影响,用这种方式声明的变量在程序执行之前创建,并在程序整个执行期间一直存在。
变量类型 | 声明的位置 | 是否存于堆栈 | 作用域 | 如果声明为static |
---|---|---|---|---|
全局 | 所有代码块之外 | 否 | 从声明处到文件尾 | 不允许从其他源文件访问 |
局部 | 代码块起始处 | 是 | 整个代码块 | 变量不存储于堆栈中,它的值在程序执行期间一直存在 |
形式参数 | 函数头部 | 是 | 整个函数 | 不允许 |