《C++面向对象程序设计》之变量的生存期

《C++面向对象程序设计》之变量的生存期

静态生存期

(1)全局静态生存期:在函数体外声明,作用域从声明处开始到文件结尾处结束,称其有文件作用域,相当于全局变量 。

(2)局部静态生存期:在函数体内声明,使用关键字static,块作用域,即其作用域从声明处开始,到快结束的大括号为止。需要注意的是:当多次调用声明的局部静态变量的函数时,其声明只执行一次,并且在多次调用中,体现其静态特性,即在该函数体内,保持其值,第二次调用时,仍在原值得基础上改变。(见下例中fun()函数中的局部静态变量a,b);局部静态变量作用域为块作用域,仔细理解:在下例中,fun()函数和main()函数中定义的局部静态变量a互补干扰。

动态生存期

在块作用域中声明,不用static修饰,作用域从声明处开始到命名该标识符的作用域结束处。
随时创建,随时删除,也叫自动变量(用关键字auto定义,可省略)

例2-14(宋春花,吕进来主编,人民邮电出版社):


#include "iostream"
using namespace std;              
int i = 1;                       //i为全局静态变量
void fun()
{
	static int a=2;                     
	static int b=0;          //a,b为静态局部变量,具有静态生存期
	int c=10;                  //c为局部变量,具有动态生存周期
	a=a+2;
	i=i+32;
	c=c+5;
	cout<<"
fun()函数:
";
	cout<<"i="<<i<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
	b=a;
}
int main ( )                             
{
	static int a=0;             //a为静态局部变量,具有静态生存周期
	int b=-10;
	int c=0;                      //b,c为局部变量,动态生存周期
	cout<<"
main()函数:
 ";
    cout<<"i="<<i<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
	c=c+8;
	fun();
	cout<<"
main()函数: 
";
	cout<<"i= "<<i<<"a="<<a<<"b="<<b<<"c="<<c<<endl;
	i=i+10;
	fun();
	return 0;
}


输出结果:

原文地址:https://www.cnblogs.com/HZL2017/p/6764818.html