static静态变量的⽣命周期
静态变量的类型说明符是static。静态变量当然是属于静态存储⽅式,但是属于静态存储⽅式的量不⼀定就是静态变量,例如外部变量虽属于静态存储⽅式,但不⼀定是静态变量,必须由 static加以定义后才能成为静态外部变量,或称静态全局变量。对于⾃动变量,它属于动态存储⽅式。但是也可以⽤static定义它为静态⾃动变量,或称静态局部变量,从⽽成为静态存储⽅式。由此看来,⼀个变量可由static进⾏再说明,并改变其原有的存储⽅式。
1. 静态局部变量
在局部变量的说明前再加上static说明符就构成静态局部变量。例如:
static int a,b; static float array[5]={1,2,3,4,5};
静态局部变量属于静态存储⽅式,它具有以下特点:
(1)静态局部变量在函数内定义,但不象⾃动变量那样,当调⽤时就存在,退出函数时就消失。静态局部变量始终存在着,也就是说它的⽣存期为整个源程序。
(2)静态局部变量的⽣存期虽然为整个源程序,但是其作⽤域仍与⾃动变量相同,即只能在定义该变量的函数内使⽤该变量。退出该函数后,尽管该变量还继续存在,但不能使⽤它。
(3)允许对构造类静态局部量赋初值。若未赋以初值,则由系统⾃动赋以0值。
(4)对基本类型的静态局部变量若在说明时未赋以初值,则系统⾃动赋予0值。⽽对⾃动变量不赋初值,则其值是不定的。根据静态局部变量的特点,可以看出它是⼀种⽣存期为整个源程序的量。虽然离开定义它的函数后不能使⽤,但如再次调⽤定义它的函数时,它⼜可继续使⽤,⽽且保存了前次被调⽤后留下的值。因此,当多次调⽤⼀个函数且要求在调⽤之间保留某些变量的值时,可考虑采⽤静态局部变量。虽然⽤全局变量也可以达到上述⽬的,但全局变量有时会造成意外的副作⽤,因此仍以采⽤局部静态变量为宜。
2.静态全局变量
static修饰的变量全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。全局变量本⾝就是静态存储⽅式,静态全局变量当然也是静态存储⽅式。这两者在存储⽅式上并⽆不同。这两者的区别虽在于⾮静态全局变量的作⽤域是整个源程序,当⼀个源程序由多个源⽂件组成时,⾮静态的全局变量在各个源⽂件中都是有效的。⽽静态全局变量则限制了其作⽤域,即只在定义该变量的源⽂件内有效,在同⼀源程序的其它静态全局变量的作⽤域局限于⼀个源⽂件内,只能为该源⽂件内的函数公⽤,因此可以避免在其它源⽂件中源⽂件中不能使⽤它。由于静态全局变量的作⽤域局限于⼀个源⽂件内,只能为该源⽂件内的函数公⽤
引起错误。从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储⽅式即改变了它的⽣存期。把全局变量改变为静态变量后是改变了它的作⽤域,限制了它的使⽤范围。因此static 这个说明符在不同的地⽅所起的作⽤是不同的。应予以注意。
汇总:(1)静态局部变量和全局变量⽣命周期为整个源程序的周期,⽽动态的局部变量为函数的⽣存周期;
(2)静态的全局变量作⽤范围在该源⽂件中,⾮静态的全局变量在的源程序中(包含多个源⽂件);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论