C++ 变量存储类别 解析

动态存储方式与静态存储方式;

变量的属性作用域在空间的角度来分析,分为局部变量和全局变量

 

变量还有一种属性存储期(生命期)

这个属性可以分为{

 

                                    动态存储期

                                    静态存储期

                                    

这个分为是由变量的静态存储方式和动态存储方式决定的

 

存储空间可以分为三部分;

 

 程序区

 静态存储区

 动态存储区

 

全局变量放在静态存储区

程序开始时,分配存储单元,结束时释放空间

程序执行时他们占据固定的存储单元,不是动态分配的

 

动态存储区放的是:函数形参,函数中的自动变量,函数调用时的现场保护和返回地址;

1、自动变量;

  如果不是用static关键字加以声明,编译器会动态的分配存储空间

 

在函数结束是会释放这些空间

因此局部变量称为自动变量  自动变量用auto作存储类别的声明

默认都是自动变量

2、用static声明静态局部变量

 

  在函数调用结束后不消失而保留原值,其占用的存储单元也不释放

 

在下次调用时该变量保留上一次函数调用结束时的值

 

附上一个小例子:

#include <iostream>
using namespace std;
int f(int a)
{
    auto int b = 0;
    static int c = 3;
    
    b = b+1;
    c = c+1;
    
    return a+b+c;
    
}
int main (int argc, const char * argv[])
{
    
    int a = 2;
    
    for(int i=0;i<5;i++)
         cout<<f(a)<<"\n";
    return 0;

}

3、用register声明寄存器变量;

 

一般的变量都是存储在内存中的,在程序需要的时候,就把变量从内存中读取到运算器中,加入有个别的变量需要重复的用到,那么在读取内存变量的过程中就花费了大量的时间,所以可以通过register声明寄存器变量在运算器中,以提高运算速度;

 

4、用extern声明外部变量

 

 全局变量(外部变量)

 是在函数的外部定义的,作用域是从变量定义处开始到文件末尾。

 

但是如果你额外部变量不是在文件的开头定义,那么他的有效范围只限于文件定义处到文件末尾;

 

estern int a,   a 是一个已经在别处定义的变量;

 

5、用static声明只限于本文件使用的外部变量

 

    加入两个文件中都有number变量

 

 file1中用static定义

 file2即使用了extern也不能引用file1中的number变量

 

 

综上所述:

         

                 C++中允许四种存储类别

  

 

auto    //字符型自动变量,在函数内定义

static  //静态局部整形变量或静态外部整形变量

register //整形寄存器变量,在函数内定义

extern   //声明一个已经定义的外部整形变量

 

发布了93 篇原创文章 · 获赞 132 · 访问量 21万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章