`

C++ static关键字详解

    博客分类:
  • C++
阅读更多
1.预备知识:动态存储和静态存储
 
    内存中供用户使用的存储空间可以分为三部分,即: 程序区,静态存储区, 动态存储区
数据分别存放在静态存储区和动态存储区中。全局变量存储在静态存储区中,在程序开始执行时给全局变量分配存储单元,程序执行完毕就释放这些单元。它们的生命周期是整个程序运行的生命周期。在程序执行过程中它们占据固定的存储单元,而不是动态地分配和释放。
    在动态存储区中存放一下数据:1)函数的形参 2)函数中的自动变量(未加static声明的普通局部变量)3)函数调用时的现场保护和返回地址

2.static声明的局部变量
   
     函数中的局部变量,如果不用关键字static加以声明,编译系统对它们是动态分配存储空间的。函数的形参和在函数中定义的变量都属于这一类。在调用函数时,系统给形参和函数中定义的变量冬天分配存储空间,数据存储在动态存储区中。在函数调用结束时就自动释放这些空间。
    有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的内存空间不进行释放,在下一次调用函数时保留上一次函数调用结束时的值。这时就应该声明该函数是静态局部变量。
    静态局部变量有以下几个特点:
   (1)静态局部变量在静态存储区中分配存储单元。在整个程序运行的过程中都不进行释放
   (2)为静态局部变量赋初值是在编译时进行的。只赋初值一次,在程序运行时就已经有初值了。
   (3)如果在定义局部变量时不赋初值,对静态变量自动赋值0 或空字符。
   (4)虽然静态局部变量在函数调用结束后仍然存在,但其他函数是不能引用它的,也就是说,在其他函数中它是“不可见”的。

3.static声明静态外部变量
   
    普通的外部变量可以供整个程序使用,在一个外部变量的源文件中声明的外部变量,在另一个文件中用extern关键字加以引用。
    用static关键字声明的外部变量,只能在其声明的源文件中进行访问,在其他文件中是无法访问的。因此,static关键字修饰的外部变量,为其加上了访问域。
   然而,值得注意的是,无论是加上static的外部变量或是没有加static的外部变量,数据都要存储在静态的存储区中。


4.总结
    static修饰全局变量,则该变量在本文件中有效;static修饰局部变量,则该变量可保存状态;static修饰函数,则函数仅在本文件中有效。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics