回覆列表
-
1 # 髒話比謊話乾淨558
-
2 # 使用者3689591699672711
靜態變數(static).靜態變數之所以是因為靜態,是因為他在整個程式生命週期的地址靜止不變。也就是說在整個程式裡面只儲存有一份複製。static關鍵字允許它在不同的函式呼叫間保持它的值。如果一個靜態變數被訪問後值改變,它就會保持新的值。如果這變數再次被訪問,它將會維持最新的值 class A { public: static int i; private: }; int A::i = 1; //必須這樣初始化
c語言中靜態變數作常量使用,用於儲存常數。可用const,constant或final等關鍵字標識,其值就會在編譯時設定,並且無法在執行時改變。編譯器通常將靜態常量與文字一起置於目標檔案的文字區域,而非常量初始化資料則置於資料區;而如若有需要,有些編譯器還可選擇為其開闢專用區。
對於靜態全域性變數來說,針對某一原始檔的以static宣告的檔案級變數與函式的作用域只限於檔案內(只在檔案內可見),也即“內部連線”,因而可以用來限定變數的作用域。
擴充套件資料:
在函式內以static宣告的靜態區域性變數雖然與自動區域性變數的作用域相同(即作用域都只限於函式內),但儲存空間是以靜態分配而非預設的自動分配方式獲取的,因而儲存空間所在區域不同。
一般來說,靜態分配時儲存空間於編譯時在程式資料段分配,一次分配全程有效;而自動分配時儲存空間則是於呼叫棧上分配,只在呼叫時分配與釋放,且兩次呼叫間變數值始終保持一致;必須注意,靜態區域性變數只能初始化一次,這是由編譯器來保證實現。