static变量
static变量又称为“静态变量”,它和auto变量一样,也是写在变量声明的最前面。如:
static int i = 10;
静态变量可以分为:静态全局变量、静态局部变量2种类型,静态全局变量声明在函数外部,静态局部变量则在函数内部。他们有一个明显的特点,即:声明一次,永久使用。
静态变量的优缺点:
优点:静态变量只初始化一次,数据一直保留,默认值为:0或空值
缺点:静态变量会一直占用内存空间,直到程序运行结束。
#include <iostream>
using namespace std;
static int b; // 此处未赋值,编译器默认赋值为:0
void PuTong()
{
int a = 0;
cout<<"普通变量:"<< a <<endl;
++a;
} //普通函数内部的变量,在每次调用时都会被从新创建并赋值
void JingTaiQuanJu()
{
cout<<"静态全局变量:"<< b <<endl;
b++;
} //使用了静态全局变量 b ,只初始化一次,之后再调用这个函数,则在原基础上递增
void JingTaiJuBu()
{
static int c = 1;
cout<<"静态局部变量:"<< c <<endl;
c++;
} //使用了静态局部变量,和静态全局变量一样。
int main()
{
PuTong();
PuTong();
JingTaiQuanJu();
JingTaiQuanJu();
JingTaiJuBu();
JingTaiJuBu();
}
输出:普通变量:0
普通变量:0
静态全局变量:0
静态全局变量:1
静态局部变量:1
静态局部变量:2
通过以上代码,我们看到静态变量和普通变量的区别,静态变量,无论全局还是局部,都只要一次初始化,之后便在原有基础上进行改变,而普通变量是不具备这个能力的。正因如此,静态变量更适合做一些统计数据的函数因子。
静态全局变量和全局变量的区别:
全局变量:可以在多个文件中访问,适合需要共享数据的场景;
静态全局变量:只能在定义它的源文件中访问,具备封装的特性。