zoukankan      html  css  js  c++  java
  • C/C++中的变量和静态变量

      static有两种用法:一是面向过程程序设计语言中的static,用于普通变量和函数,不涉及类;二是面向对象程序设计中的static,主要涉及static在类中的作用。

    面向过程设计中的static

    1. 非static全局变量
        非static全局变量保存在内存中程序的数据段,生存期为程序的整个生存期,有效范围为整个程序,只需要在一个源文件中被定义,就可以作用于所有源文件
    2. 非static局部变量
        非static局部变量保存在内存中数据的栈内存区域,生存期为该局部变量定义的函数的调用期间,有效范围为定义该局部变量的函数内部。当该函数调用结束后,变量被撤销,其所占用的内存被收回
    3. static全局变量
        static全局变量保存在内存中程序的数据段,生存期为从该变量第一次被定义到程序结束,有效范围为全局,但如果程序含有多个文件,则只能在被定义的文件中被访问,在其他文件模块中不能被访问
    4. static局部变量
        static局部变量保存在内存中程序的数据段,生存期为从该变量第一次被定义到程序结束,有效范围为该变量被定义的函数内部。

       静态变量会被放在程序的静态数据存储区(数据段)(全局可见)中,这样可以在下一次调用的时候还可以保持原来的值,这是与堆变量和栈变量的区别;变量用static告知编译器,自己仅仅在变量定义的作用范围内可见,这是与全局变量的区别
    (1)若全局变量仅仅在单个C文件中访问,则可以将这个变量修改为静态全局变量,以降低模块间的耦合度;
    (2)若全局变量仅仅被单个函数访问,则可以将这个变量改为该函数的静态局部变量,以降低模块间的耦合度;
    (3)设计和使用访问动态全局变量、静态全局变量、静态局部变量的函数时候,要考虑重入问题,因为他们都在静态数据存储区,全局可见;
    (4)如果我们需要一个可重入的函数,则一定要避免函数中使用static变量;
    (5)函数中必须使用static变量情况:比如当某函数的返回值为指针类型时,则必须是static的局部变量的地址作为返回值,若为auto类型,则返回为错指针。

    面向对象设计中的static

      1. 非静态成员变量
          非静态成员变量在类的每个对象中都存在有一个副本,各个对象中的相应副本相互独立。 非静态成员变量和对象挂钩,生存期间为其所在对象的生存期间。
      2. 非静态成员函数
          非静态成员函数的第一个隐含参数为调用该函数的对象的this指针。 非静态成员函数可以访问类的非静态成员变量,也可以访问类的静态成员变量和调用类的静态成员函数。
      3. 静态成员变量
          静态成员变量为该类的所有对象共享的变量,所有的对象都只访问这一个变量实例。静态成员变量可以通过类名::变量名 或者 实例名.变量名来访问
      4. 静态成员函数
          静态成员函数没有隐含的this指针参数,且只能访问类的静态成员变量和全局的变量,可以作为回调函数来使用。
  • 相关阅读:
    使用 Fiddler 对android模器进行Http监控(转)
    UDID替代方案(转)
    iPhone用nib/xib文件载入窗口,和用代码写窗口,到底哪个快?(转)
    UINavigationController修改默认的动画
    《Programming WPF》翻译 第8章 5.创建动画过程
    《Programming WPF》翻译 第8章 6.我们进行到哪里了?
    《Programming WPF》翻译 第8章 2.Timeline
    《Programming WPF》翻译 第9章 4.模板
    《Programming WPF》翻译 第9章 1.自定义控件基础
    《Programming WPF》翻译 第9章 前言
  • 原文地址:https://www.cnblogs.com/gtarcoder/p/4625369.html
Copyright © 2011-2022 走看看