靜態(tài)變量在計算機編程領(lǐng)域指在程序執(zhí)行前系統(tǒng)就為之靜態(tài)分配(也即在運行時中不再改變分配情況)存儲空間的一類變量。與之相對應(yīng)的是在運行時只暫時存在的自動變量(即局部變量)與以動態(tài)分配方式獲取存儲空間的一些對象,其中自動變量的存儲空間在調(diào)用棧上分配與釋放。“靜態(tài)變量”這一術(shù)語有兩個容易混淆的定義:
![]()
語言無關(guān)的通用定義:與程序有著相同生命周期的變量;
C族語言特有的定義:以static存儲類聲明的變量。
而在以Pascal為代表的許多程序語言中,所有局部變量都由系統(tǒng)自動分配存儲空間,而所有全局變量的存儲空間則以靜態(tài)分配的方式獲取(對應(yīng)“靜態(tài)變量”),因此由于實際上“局部變量”和“全局變量”這兩個術(shù)語已足以涵蓋所有的情況,在這些程序語言中通常不使用“靜態(tài)變量”這一術(shù)語,而直接以“全局變量”代之。一般來說,在這些程序語言中,靜態(tài)變量就是全局變量,而即使在有明確區(qū)分全局和靜態(tài)變量的程序語言中,在編譯后的代碼里二者也以相同的方式獲取存儲空間。而今術(shù)語“靜態(tài)變量”的概念則主要基于C族語言的“static”的定義(即定義2)。
static存儲類有什么作用?除明確標識出變量的生命周期外,將變量聲明為static存儲類還會根據(jù)變量屬性不同而有一些特殊的作用:
1.對于靜態(tài)全局變量來說,針對某一源文件的以static聲明的文件級變量與函數(shù)的作用域只限于文件內(nèi)(只在文件內(nèi)可見),也即“內(nèi)部連接”,因而可以用來限定變量的作用域;
2.對于靜態(tài)局部變量來說,在函數(shù)內(nèi)以static聲明的變量雖然與自動局部變量的作用域相同(即作用域都只限于函數(shù)內(nèi)),但存儲空間是以靜態(tài)分配而非默認的自動分配方式獲取的,因而存儲空間所在區(qū)域不同(一般來說,靜態(tài)分配時存儲空間于編譯時在程序數(shù)據(jù)段分配,一次分配全程有效;而自動分配時存儲空間則是于調(diào)用棧上分配,只在調(diào)用時分配與釋放),且兩次調(diào)用間變量值始終保持一致;必須注意,靜態(tài)局部變量只能初始化一次,這是由編譯器來保證實現(xiàn)。
3.對于靜態(tài)成員變量來說,在C++中,在類的定義中以static聲明的成員變量屬于類變量,也即在所有類實例中共享,與之相對的就是過程變量。
關(guān)鍵詞: static變量是什么 static存儲類有什么作用 c語言中static的作用和用法 static局部變量
營業(yè)執(zhí)照公示信息