靜態存儲類型小結

  • 靜態全局變量
    1.在全局變量前面加一個static,使該變量只在這個源文件可用,稱之爲全局靜態變量
    2.靜態全局變量對組成該程序的其他源文件是無效的
file1.cpp
static int a=3;
int main()
{
	...
}	
file2.cpp
extern int a;
int func(int n)
{
	...
	a=a*n;
}
  • 靜態局部變量只能用於本文件也就是file1,cpp
    -並不是只有用static聲明的外部變量才採用靜態存儲方式,這兩種形式的外部變量均採用靜態存儲方式,只是作用範圍不同,都是在編譯時分配內存的。

  • 靜態局部變量
    1.靜態局部變量在靜態存儲區內分配存儲單元,在程序整個運行期間都不釋放,而自動變量(即動態局部變量)屬於動態存儲類別,存儲在動態存儲區空間,函數調用後即釋放掉
    2.對靜態局部變量是在編譯時賦初值,即只賦初值一次,在程序運行時已有初值,以後每次調用不再重新賦初值而是保留上一次函數調用結束時的值
    3.如果在定義局部變量時不賦初值的話,對靜態局部變量來說,編譯時自動賦初值0(對數值型變量)或空字符(對字符變量),但對於自動變量,如果不賦初值,則它的值是一個不確定的值
    4.雖然靜態局部變量在函數調用結束時依然存在,但是其他函數不能引用

以下情況需用到局部靜態變量

  • 需要保留函數上一次調用結束時的值
  • 初始化後,變量只被引用而不改變其值,這時用局部靜態變量以免每次調用時重新賦值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章