全局變量+局部變量+靜態局部變量+靜態全局變量

全局變量
作用域:全局作用域(全局變量只需在一個源文件中定義,就可以作用於所有的源文件。)
生命週期:程序運行期一直存在
引用方法:其他文件中要使用必須用extern 關鍵字聲明要引用的全局變量。
內存分佈:全局數據區
注意:如果在兩個文件中都定義了相同名字的全局變量,連接出錯:變量重定義
全局靜態變量
作用域:文件作用域(只在被定義的文件中可見。)
生命週期:程序運行期一直存在
內存分佈:全局數據區
定義方法:static關鍵字,const 關鍵字
注意:只要文件不互相包含,在兩個不同的文件中是可以定義完全相同的兩個靜態變量的,它們是兩個

完全不同的變量
靜態局部變量
作用域:局部作用域(只在局部作用域中可見)
生命週期:程序運行期一直存在
內存分佈:全局數據區
定義方法:局部作用域用中用static定義
注意:只被初始化一次,多線程中需加鎖保護

int fac(int n)
{
    static int nRet = 1;    //靜態局部變量

    nRet *= n;

    return nRet;
}

int main()
{
    for(int i=1;i<5;i++)
    {
        printf("%d!=%d\n",i,fac(i));
    }
    getchar();
    return 0;
}

結果:
這裏寫圖片描述
局部變量
作用域:局部作用域(只在局部作用域中可見)
生命週期:程序運行出局部作用域即被銷燬
內存分佈:棧區
注意:auto指示符標示

int fac(int n)
{
    int nRet = 1;    //靜態局部變量

    nRet *= n;

    return nRet;
}

int main()
{
    for(int i=1;i<5;i++)
    {
        printf("%d!=%d\n",i,fac(i));
    }
    getchar();
    return 0;
}

結果:
這裏寫圖片描述
函數中在堆中開闢內存
0.申請方式和回收方式不同
堆和棧的第一個區別就是申請方式不同:棧(英文名稱是stack)是系統自動分配空間的,例如我們定義

一個 char a;系統會自動在棧上爲其開闢空間。而堆(英文名稱是heap)則是程序員根據需要自己申請

的空間,例如malloc(10);開闢十個字節的空間。
由於棧上的空間是自動分配自動回收的,所以棧上的數據的生存週期只是在函數的運行過程中,運行後

就釋放掉,不可以再訪問。而堆上的數據只要程序員不釋放空間,就一直可以訪問到,不過缺點是一旦

忘記釋放會造成內存泄露。還有其他的一些區別我認爲網上的朋友總結的不錯這裏轉述一下:
參考:http://blog.csdn.net/yunyun1886358/article/details/5632087
http://100926.blog.sohu.com/189515489.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章