#include “stdio.h”
/*目的: 認識靜態區域性變數 static !!!*/
int f(int a)
{
auto b = 0;
static int c = 3;
b = b + 1;
c = c + 1;
printf(” c = %d “,c );
return(a + b + c);
}
int main()
{
int a = 2, i;
for (i = 0; i < 3; i++)
{
printf(“f(a) = %d “, f(a)); // 結果是7,8,9 因為函式f中靜態區域性變數在上一次的 執行中並沒有被釋放,
//例: 第一次迴圈後c = 4;第二次再執行c = 4 ;並沒有 釋放重新置3
}
while (1);
return 0;
}
對靜態區域性變數的說明:
1) 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元。在程式整個執行期間 都不釋放。而自動變數(即動態區域性變數)屬於動態儲存類別,佔動態儲存空間,函式 呼叫結束後即釋放。
2) 靜態區域性變數在編譯時賦初值,即只賦初值一次;而對自動變數賦初值是在函式呼叫時 進行,每呼叫一次函式重新給一次初值,相當於執行一次賦值語句。
3) 如果在定義區域性變數時不賦初值的話,則對靜態區域性變數來說,編譯時自動賦初值 0(對 數值型變數)或空字元(對字元變數)。而對自動變數來說,如果不賦初值則它的值是 一個不確定的值。
注:本人小白一個,此類文章是自己在寫程式時由於概念瞭解不透徹遇到了bug,通過看書解決了bug後,將自己對那些基礎概念的理解記錄下來,以便今後複習。有些內容是摘抄書上的,感覺比較重要的,記錄下來方便以後的複習。 如果有些錯誤的地方還請各路大神給予指導,同時也希望自己的文章能給和自己一樣的新手一些幫助。另外,自己還有一個小小的願望,就是希望自己能在部落格園上認識更多的熱愛IT技術的朋友,交流一下學習經驗,歡迎大家評論留言。 最後預祝大家早日成為IT技術大神!!!嘻嘻!!!