首页 理论教育C语言程序设计第2版:static变量用法

C语言程序设计第2版:static变量用法

【摘要】:在变量名及其类型之前加上关键字static,就规定该变量的存储类型为静态的。例5.11一个静态变量和自动变量比较的程序。运行结果:auto_var=0,static_var=0auto_var=0,static_var=1auto_var=0,static_var=2auto_var=0,static_var=3auto_var=0,static_var=4上例中,main()函数共5次调用了auto_static()函数,每次调用时自动变量auto_var都输出0值,这是因为每次调用时系统都给auto_var分配存储单元并赋初值0。当auto_static()结束运行时,static_var的值仍然保留,再次调用auto_static()函数时,系统不再为它重新分配存储空间并赋初值,而是采用以前留下的值,因此static_var的值每次调用都会增加1。

变量名及其类型之前加上关键字static,就规定该变量的存储类型为静态的。一个静态变量的存储形式是这样的:当第一次调用该变量所在的函数时,系统为它分配存储单元,当程序从函数退出时,并不释放静态变量所占的存储单元,其值也仍然保留,下次再调用时,静态变量仍拥有上次调用时留下的值。

例5.11 一个静态变量和自动变量比较的程序。

运行结果:

auto_var=0,static_var=0

auto_var=0,static_var=1(www.chuimin.cn)

auto_var=0,static_var=2

auto_var=0,static_var=3

auto_var=0,static_var=4

上例中,main()函数共5次调用了auto_static()函数,每次调用时自动变量auto_var都输出0值,这是因为每次调用时系统都给auto_var分配存储单元并赋初值0。虽然语句“auto_var++;”使auto_var增加到1,但auto_static()运行结束时,分配给auto_var的存储单元就被释放,下次还是重新开始,而static_var只是在第一次被调用时才分配给存储单元并赋初值0,语句“static_var++;”使static_var增加了1。当auto_static()结束运行时,static_var的值仍然保留,再次调用auto_static()函数时,系统不再为它重新分配存储空间并赋初值,而是采用以前留下的值,因此static_var的值每次调用都会增加1。