一、靜態區域性變數
靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區(在靜態儲存區內分配儲存單元),該區域中的資料在整個程式的執行期間一直占用這些儲存空間(在程式整個執行期間都不釋放),也可以認為是其記憶體位址不變,直到整個程式執行結束(相反,而auto自動變數,即動態區域性變數,屬於動態儲存類別,佔動態儲存空間,函式呼叫結束後即釋放)。靜態變數雖在程式的整個執行過程中始終存在,但是在它作用域之外不能使用。
靜態變數並不是說其就不能改變值,不能改變值的量叫常量。 其擁有的值是可變的 ,而且它會保持最新的值。說其靜態,是因為它不會隨著函式的呼叫和退出而發生變化。即上次呼叫函式的時候,如果我們給靜態變數賦予某個值的話,下次函式呼叫時,這個值保持不變。
靜態區域性變數的初始化表示式必須是乙個常量或者常量表示式。即使區域性靜態變數定義時沒有賦初值,系統會自動賦初值0(對數值型變數)或空字元(對字元變數);靜態變數的初始值為0。而對自動變數auto來說,如果不賦初值則它的值將是個不確定的值。
二、靜態全域性變數
全域性變數(外部變數)的說明之前再冠以static 就構成了靜態的全域性變數。
全域性變數本身就是靜態儲存方式,靜態全域性變數當然也是靜態儲存方式。
這兩者在儲存方式上並無不同。
這兩者的區別雖在於:
1、非靜態全域性變數的作用域是整個源程式,當乙個源程式由多個原始檔組成時,非靜態的全域性變數在各個原始檔中都是有效的。
2、靜態全域性變數則限制了其作用域, 即只在定義該變數的原始檔內有效,在同一源程式的其它原始檔(即宣告了該變數的cpp檔案,或包含該變數宣告標頭檔案的cpp檔案)中不能使用它。
由於靜態全域性變數的作用域侷限於乙個原始檔內,只能為該原始檔內的函式公用,因此可以避免在其它原始檔中引起錯誤。
從以上分析可以看出————
把區域性變數改變為靜態變數後是改變了它的儲存方式,即改變了它的生存期。
把全域性變數改變為靜態變數後是改變了它的作用域,限制了它的使用範圍。
因此static這個說明符在不同的地方所起的作用是不同的。應予以注意。
(來自csdn)
static靜態變數的理解
靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在 靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直 到整個程式執行結束 相反,而auto自動變數,即動態區域...
static靜態變數的理解
靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在 靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直 到整個程式執行結束 相反,而auto自動變數,即動態區域...
static靜態變數的理解
靜態變數 型別說明符是static。靜態變數屬於靜態儲存方式,其儲存空間為記憶體中的靜態資料區 在 靜態儲存區內分配儲存單元 該區域中的資料在整個程式的執行期間一直占用這些儲存空間 在程式整個執行期間都不釋放 也可以認為是其記憶體位址不變,直 到整個程式執行結束 相反,而auto自動變數,即動態區域...