在开始介绍什么是静态变量之前,我们先来介绍什么是静态存储方式?
1、基本概念
静态存储方式:指在程序运行时,给变量分配固定的存储空间的方式
2、 静态存储区存放以下变量:
全局变量
:在程序开始执行时给全局变量分配存储区,程序运行完毕之后释放。在程序运行过程中它们占据固定的存储单元而不动态进行分配和释放。
静态变量
:有时希望变量的值在函数调用结束后不消失而保留原值,这时就应该指定变量为“静态变量”,用关键字static
进行命名
用static声明的静态变量的三个作用:
1. 隐藏与隔离的作用
全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在各个源文件中都是有效的。如果我们希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用。这时,就可以通过在全局变量之前加上关键字 static 来实现,使全局变量被定义成为一个静态全局变量。这样就可以避免在其他源文件中引起的错误。也就起到了对其他源文件进行隐藏与隔离错误的作用,有利于模块化程序设计。
-
声明静态变量前,相当于全局变量,可以访问:
-
声明静态变量之后,其他源文件就不可以访问了:
2.保持内容的持久性
有时候,我们希望函数中局部变量的值在函数调用结束之后不会消失,而仍然保留其原值。即它所占用的存储单元不释放,在下一次调用该函数时,其局部变量的值仍然存在,也就是上一次函数调用结束时的值。这时候,我们就应该将该局部变量用关键字 static 声明为“静态局部变量“。
当将局部变量声明为静态局部变量的时候,也就改变了局部变量的存储位置,即从原来的栈中存放改为静态存储区存放。这让它看起来很像全局变量,其实静态局部变量与全局变量的主要区别就在于可见性,静态局部变量只在其被声明的代码块中是可见的。
3.默认初始化为0
静态变量与全局变量也一样,它们都存储在静态数据区中,因此其变量的值默认也为 0。