静态变量(static)⽤法
有时希望函数中的局部变量的值在函数调⽤结束后不消失⽽保留原值,即其占⽤的存储单元不释放,在下⼀次该函数调⽤时,该变量保留上⼀次函数调⽤结束时的值。这时就应该指定该局部变量为静态局部变量(static local variable)。
例 静态局部变量的值。
#include <iostream>
using namespace std;
int f(int a)                          //定义f函数,a为形参
{auto int b=0;                      //定义b为⾃动变量
static int c=3;                    //定义c为静态局部变量
b=b+1;
c=c+1;
return a+b+c;
}
static修饰的变量int main( )
{int a=2,i;
for(i=0;i<3;i++)
cout<<f(a)<<″ ″;
cout<<endl;
return 0;
}
运⾏结果为
7 8 9
先后3次调⽤f函数时,b和c的值如下表所⽰。
对静态局部变量的说明:
(1) 静态局部变量在静态存储区内分配存储单元。在程序整个运⾏期间都不释放。⽽⾃动变量(即动态局部变量)属于动态存储类别,存储在动态存储区空间(⽽不是静态存储区空间),函数调⽤结束后即释放。
(2) 为静态局部变量赋初值是在编译时进⾏值的,即只赋初值⼀次,在程序运⾏时它已有初值。以后每次调⽤函数时不再重新赋初值⽽只是保留上次函数调⽤结束时的值。⽽为⾃动变量赋初值,不是在编译时进⾏的,⽽是在函数调⽤时进⾏,每调⽤⼀次函数重新给⼀次初值,相当于执⾏⼀次赋值语句。
在类中也是这样,即使声明了不同的对象,但是静态变量是绑定类的,⽽不是绑定对象的!
(3) 如果在定义局部变量时不赋初值的话,对静态局部变量来说,编译时⾃动赋初值0(对数值型变量)或空字符(对字符型变量)。⽽对⾃动变量来说,如果不赋初值,则它的值是⼀个不确定的值。这是由于每次函数调⽤结束后存储单元已释放,下次调⽤时⼜重新另分配存储单元,⽽所分配的单元中的值是不确定的。
(4) 虽然静态局部变量在函数调⽤结束后仍然存在,但其他函数是不能引⽤它的,也就是说,在其他函
数中它是“不可见”的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。