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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章