• 《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;
    }
    
    
    

    输出结果:

  • 相关阅读:
    i++后的哈希码会变的原因
    Synchronized 锁的错误使用方式及如何解决
    线程的状态及状态之间的转换
    水满自溢「限流算法第四把法器:漏桶算法」- 第303篇
    Thread的Interrupt、isInterrupted、interrupted
    证明java本身是一个多线程
    强引用、软引用、弱引用、虚引用
    经典脏读,幻想读 不可重复读
    没有预热,不叫高并发「限流算法第三把法器:令牌桶算法」- 第302篇
    redisAPI
  • 原文地址:https://www.cnblogs.com/HZL2017/p/6764818.html
Copyright © 2020-2023  润新知