C++-静态局部变量

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++-静态局部变量相关的知识,希望对你有一定的参考价值。

作者:翟天保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也是一样的。

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

以上是关于C++-静态局部变量的主要内容,如果未能解决你的问题,请参考以下文章

c/c++静态函数和静态成员函数

在c语言中给变量赋初值有啥作用

static

.为啥c语言里有的变量要赋初值,有的变量不用赋。

自动对象和静态局部对象

请问C中结构体变量为全局变量或静态变量时才能初始化么?