全局變量
全局變量的使用是一個非常頭疼的問題,初學者一不小心就會使用錯誤,我當初也深受荼毒。再次學習c++有了更加清晰的認識,做個筆記備忘。
全局變量和局部變量不同,局部變量的生存週期只存在於函數的執行週期內。函數被執行,要使用的局部變量開闢內存,函數執行結束,相應的內存被收回。而全局變量的生存週期存在於整個工程的始終。
但是全局變量的使用應該要十分小心。因爲它定義在不同的位置,鏈接性就不同(好吧,專業術語裝個比),其實就是可以正確使用這個全局變量的範圍不同。下面介紹全局變量的三種作用範圍及正確使用方法。
1 int a = 1;2 static int a = 1;
3
int function()
{
static int a = 1;
........
return a;
}
在這可能有些同學要問,爲什麼3中定義變量要加 static,因爲不加它就是個局部變量
開始介紹使用方法
第1種:在函數體外,嚴格的說是在代碼塊({}花括號)外定義(聲明)的變量且不加關鍵字static
這種全局變量的作用域是整個工程,但是在其他文件下使用這個全局變量不能再定義且必須使用
extern int a ;
聲明,如果再定義編譯器會提示錯誤
第2種:在函數體外,但是加了關鍵詞static
這種定義(聲明)方法,全局變量的作用域只是這個文件
第3種:在代碼塊中,加關鍵詞static
這種方法,全局變量的作用域只在這個代碼塊中,但是出了這個代碼塊變量仍然存在
(這和局部變量存在區別,這種變量可以用來做返回值,而局部變量不能用來做返回值)
注意:一般不要在頭文件中定義全局變量,可能有多個源文件包含這個頭文件,會編譯錯誤
局部變量和全局變量同名同類型時,會優先使用局部變量
第三種全局變量只能初始化一次,即使在遞歸調用函數中