一、static关键字
通常,在函数体内定义了一个变量,每当程序运行到该语句时都会给该局部变量分配栈内存,但随着程序退出函数体,系统就会收回栈内存,局部变量也相应失效。但是有时候我们需要在两次调用之间对变量的值进行保存。通常的想法是定义一个全局变量来实现,但变量不属于函数本身,不只受函数的控制,给程序的维护带来不便。使用静态局部变量正好可以解决这个问题。
(1)静态局部变量
静态局部变量在全局区存储,静态局部变量只被初始化一次,下次使用依据上一次保存的值。生存周期为整个源程序,作用域与普通局部变量相同,该变量只能在定义该变量的函数内使用。对于基本类型的静态局部变量,若在定义时未赋以初值,则系统自动赋予0值。对于普通局部变量,若在定义时未赋以初值,则其值是未定义。把局部变量改变为静态局部变量后是改变了它的存储方式,改变了它的生存周期。
(2)静态全局变量
静态全局变量在全局区存储,静态全局变量只被初始化一次。非静态全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。而static关键字限制了其作用域,即只在定义该变量的源文件内有效,在同一源程序的其它源文件中不能使用它。 把全局变量改变为静态全局变量是改变了它的作用域,限制了它的使用范围。
(3)静态函数
静态函数和外部函数的作用域不同,static关键字限制了其作用域仅局限于本文件,在同一源程序的其它源文件中不能使用它。使用内部函数的好处是,不同的人编写不同的源文件时,不用