作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处
特征:
1.需添加关键字static。
2.在静态存储区分配内存,始终存在直到程序结束。
3.作用域为局部,在哪个函数或者语句块内声明,则只在其内有用。
4.编译时赋初值,后续运行时再赋值没用,而是根据上次执行结束的值进行后续的操作。
5.若没初始化赋初值,则编译时自动设为0或空。
测试代码:
#include <iostream>
using namespace std;
void test1()
{
static int t1 = 5;
cout << "t1_1:" << t1 << endl;
t1++;
cout << "t1_2:" << t1 << endl;
}
void test2()
{
int t2 = 0;
cout << "t2_1:" << t2 << endl;
t2++;
cout << "t2_2:" << t2 << endl;
}
void test3()
{
static int t3;
cout << "t3_1:" << t3 << endl;
t3++;
cout << "t3_2:" << t3 << endl;
}
int main()
{
for (int i = 0; i < 4; ++i)
{
cout << i << ":" << endl;
test1();
test2();
test3();
cout << endl;
}
system("pause");
}
测试结果:
0:
t1_1:5
t1_2:6
t2_1:0
t2_2:1
t3_1:0
t3_2:1
1:
t1_1:6
t1_2:7
t2_1:0
t2_2:1
t3_1:1
t3_2:2
2:
t1_1:7
t1_2:8
t2_1:0
t2_2:1
t3_1:2
t3_2:3
3:
t1_1:8
t1_2:9
t2_1:0
t2_2:1
t3_1:3
t3_2:4
总结:
t1是静态局部变量,初始化为5,后续的4次循环中,每次都加一,即使每次循环中都有static int t1 = 5;这一步,但实际上并未赋值为5,而是继续使用上一次调用结束时的值。
t2是普通局部变量,初始化为0,后续的4次循环中,每次都加一,那它就真的每次都只是从0加到1。
t3也是静态局部变量,与t1不同之处在于没有人为给定初始化的值,那它自动设为0,运行的特征同t1也是一样的。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!