C語言的存儲類型和關鍵字extern、static


1、C語言中每個變量都有3個性質:存儲期限、作用域、鏈接

1)存儲期限:變量的存儲期限決定了為變量預留的內存被釋放的時間。共2種,自動存儲期限(auto),靜態存儲期限(static),自動存儲(auto)的變量在所屬塊被執行時獲得內存單元,並在塊終止時釋放內存單元,自動的獲得或釋放內存,故名auto。具有靜態存儲的變量(static)在程序運行期間始終占有同一內存單元,靜止不變,故名static。

2)作用域:變量的作用域指可以使用該變量的那一部分程序文本。共2種,塊作用域指從聲明位置到所在塊的末尾均可見,文件作用域指從聲明的地方到文件的末尾均可見。

3)鏈接:變量的鏈接指程序的不同部分可以共享此變量。共3種,外部鏈接指可以被程序中不同文件共享,內部鏈接指只屬於單獨一個文件,無鏈接指屬於單獨一個函數,而且根本不能被共享。

2、變量的默認存儲期限、作用域、鏈接均依賴於變量的聲明位置。

1)在塊內聲明的變量:自動存儲期限、塊作用域、無鏈接。

2)在程序最外層(任意塊外部)聲明的變量:靜態存儲期限、文件作用域、外部鏈接。

int i;  //靜態存儲,文件作用域,外部鏈接
void f(void){
    INT J;   //自動存儲,塊作用域,無鏈接
}

3、static的特殊用途:

1)當在塊外部,static說明變量為內部鏈接,注意:本來在塊外部聲明的變量具有外部鏈接,加上static后,變為內部鏈接,則外部不可見了。

2)當在塊內部,static說明變量的存儲期限為靜態,注意:本來在塊內部變量為自動存儲期限。

static int i;   //靜態存儲期限,文件作用域,內部鏈接
void f(void){
    static int j;     //靜態存儲,塊作用域,無鏈接
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM