特征:
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也是一样的。
如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!