①關(guān)于變量存儲的內(nèi)存分布
C語言把保存所有變量的數(shù)據(jù)區(qū)分為動態(tài)存儲區(qū)和靜態(tài)存儲區(qū)。動態(tài)存儲區(qū)使用堆棧來管理的堕义,適合函數(shù)動態(tài)分配與回收存儲單元猜旬。而靜態(tài)存儲區(qū)相對固定,管理比較簡單倦卖,食欲存放全局變量和靜態(tài)變量洒擦。在靜態(tài)存儲區(qū)中,除了全局變量外怕膛,還有另外一種特殊的局部變量--靜態(tài)局部變量熟嫩。它存放在靜態(tài)存儲區(qū),不會像普通的局部變量那樣因為函數(shù)調(diào)用結(jié)束而被系統(tǒng)回收褐捻,它的生命周期會持續(xù)到程序結(jié)束掸茅。由于存儲單元被保留,一旦含有靜態(tài)局部變量的函數(shù)被再次調(diào)用柠逞,則靜態(tài)局部變量會被重新激活昧狮,上一次函數(shù)調(diào)用后的值仍然保存著,可以供本次調(diào)用繼續(xù)使用边苹。
靜態(tài)變量定義格式:
static 類型名 變量表?
static double f =1;局部變量又稱為自動變量陵且。自動變量如果沒有賦初值,其存儲單元中將是隨機值。就靜態(tài)變量而言慕购,如果定位時沒有賦初值聊疲,系統(tǒng)自動賦0,并且賦初值只在函數(shù)第一次調(diào)用時起作用沪悲,以后調(diào)用都按前一次調(diào)用保留的值使用获洲。這是因為靜態(tài)局部變量的生存周期始于函數(shù)的第一次調(diào)用,貫穿于整個程序殿如,當(dāng)函數(shù)第一次調(diào)用時贡珊,靜態(tài)局部變量的內(nèi)存單元得以分配,賦以處置涉馁,而函數(shù)被再次調(diào)用時门岔,此靜態(tài)局部變量已經(jīng)存在,計算機不會為它分配單元烤送,賦初值也不再發(fā)生寒随。但靜態(tài)局部變量受變量作用范圍限制,不能作用于其他函數(shù)帮坚。
靜態(tài)變量(靜態(tài)局部變量妻往,靜態(tài)全局變量)和全局變量都位于靜態(tài)存儲區(qū),他們的共同特點是生存周期貫穿于真?zhèn)€程序執(zhí)行過程试和。區(qū)別在于作用范圍不同讯泣,全局變量可作用于所有的函數(shù),靜態(tài)變量只能用于所定義的函數(shù)阅悍。
②