静态局部变量也是在函数里声明的局部变量,与普通局部变量不同的是前面加了一个static
关键字修饰。存在静态存储区而不是普通局部变量存储的栈区。
因为我们需要在函数结束以后保留此次函数运行中某个变量的值,以待下一次使用。全局变量可以做到这点但这个变量一旦放到全局,就可以被任意函数访问。如果只希望一个函数局部访问,又希望保留到下次使用,就可以使用静态局部变量。
静态局部变量只能被初始化一次,每次访问会使用上一次访问以后的值:
#include<iostream>
using namespace std;
void fun(){
static int a = 1;//初始化语句,整个程序运行过程中只执行一次
cout<<a++<<endl;
}
int main(){
cout<<"第一次调用,静态局部变量的值为:\n";
fun();//输出1
cout<<"第二次调用,静态局部变量的值为:\n";
fun();//输出2
return 0;
}
注意静态局部变量未初始化,系统默认赋值为0。如果不是在初始化的时候赋值,则该赋值语句会执行两次:
static int a;//未初始化,系统默认赋值为0
a = 1;//每次进入函数a都从1开始