①關于變量存儲的內存分布
C語言把保存所有變量的數據區(qū)分為動態(tài)存儲區(qū)和靜態(tài)存儲區(qū)。動態(tài)存儲區(qū)使用堆棧來管理的,適合函數動態(tài)分配與回收存儲單元。而靜態(tài)存儲區(qū)相對固定,管理比較簡單,食欲存放全局變量和靜態(tài)變量。在靜態(tài)存儲區(qū)中,除了全局變量外,還有另外一種特殊的局部變量--靜態(tài)局部變量。它存放在靜態(tài)存儲區(qū),不會像普通的局部變量那樣因為函數調用結束而被系統(tǒng)回收,它的生命周期會持續(xù)到程序結束。由于存儲單元被保留,一旦含有靜態(tài)局部變量的函數被再次調用,則靜態(tài)局部變量會被重新激活,上一次函數調用后的值仍然保存著,可以供本次調用繼續(xù)使用。
靜態(tài)變量定義格式:
static 類型名 變量表?
static double f =1;局部變量又稱為自動變量。自動變量如果沒有賦初值,其存儲單元中將是隨機值。就靜態(tài)變量而言,如果定位時沒有賦初值,系統(tǒng)自動賦0,并且賦初值只在函數第一次調用時起作用,以后調用都按前一次調用保留的值使用。這是因為靜態(tài)局部變量的生存周期始于函數的第一次調用,貫穿于整個程序,當函數第一次調用時,靜態(tài)局部變量的內存單元得以分配,賦以處置,而函數被再次調用時,此靜態(tài)局部變量已經存在,計算機不會為它分配單元,賦初值也不再發(fā)生。但靜態(tài)局部變量受變量作用范圍限制,不能作用于其他函數。
靜態(tài)變量(靜態(tài)局部變量,靜態(tài)全局變量)和全局變量都位于靜態(tài)存儲區(qū),他們的共同特點是生存周期貫穿于真?zhèn)€程序執(zhí)行過程。區(qū)別在于作用范圍不同,全局變量可作用于所有的函數,靜態(tài)變量只能用于所定義的函數。
②