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; //靜態存儲,塊作用域,無鏈接 }
