理解靜態局部變量(static)在程序中的執行規則

#include "stdio.h"函數

/*目的: 認識靜態局部變量 static !!!*/學習

 

int f(int a)spa

{博客

auto b = 0;io

static int c = 3;編譯

b = b + 1;  基礎

c = c + 1;變量

printf("\tc = %d\t",c );循環

return(a + b + c);  bug

}

 

int main()

{

int a = 2, i;

 

for (i = 0; i < 3; i++)

{

printf("f(a) = %d\t", f(a));       // 結果是7,8,9 由於函數f中靜態局部變量在上一次的 運行中並無被釋放,

                                               //例: 第一次循環後c = 4;第二次再執行c = 4 ;並無 釋放從新置3

}

while (1);

return 0;

}

對靜態局部變量的說明:

1) 靜態局部變量屬於靜態存儲類別,在靜態存儲區內分配存儲單元。在程序整個運行期間 都不釋放。而自動變量(即動態局部變量)屬於動態存儲類別,佔動態存儲空間,函數 調用結束後即釋放。

2) 靜態局部變量在編譯時賦初值,即只賦初值一次;而對自動變量賦初值是在函數調用時 進行,每調用一次函數從新給一次初值,至關於執行一次賦值語句。

 3) 若是在定義局部變量時不賦初值的話,則對靜態局部變量來講,編譯時自動賦初值 0(對 數值型變量)或空字符(對字符變量)。而對自動變量來講,若是不賦初值則它的值是 一個不肯定的值。 

 

注:本人小白一個,此類文章是本身在寫程序時因爲概念瞭解不透徹遇到了bug,經過看書解決了bug後,將本身對那些基礎概念的理解記錄下來,以便從此複習。有些內容是摘抄書上的,感受比較重要的,記錄下來方便之後的複習。 若是有些錯誤的地方還請各路大神給予指導,同時也但願本身的文章能給和本身同樣的新手一些幫助。另外,本身還有一個小小的願望,就是但願本身能在博客園上認識更多的熱愛IT技術的朋友,交流一下學習經驗,歡迎你們評論留言。  最後預祝你們早日成爲IT技術大神!!!嘻嘻!!!

相關文章
相關標籤/搜索