靜態存儲區與全局變量
接下來說存儲類說明符的第二個知識點——靜態變量,它包括三種:全局變量/外部變量,靜態全局變量,靜態局部變量
非常重要!工作中必用。接近於底層的一個理解。
特點:
靜態變量存儲在靜態區/靜態全局區/靜態存儲區,因為內存區域分5個區:堆區,棧區,字符常量區,靜態區,代碼區。
這個內存區域有什麽特點?我們知道棧區的特點是 :變量的申請與釋放都是由操作系統幫我們管理的,而且變量的生命周期在它的作用域結束的時候,就放掉了。
靜態存儲區的特點:
1 靜態存儲區的變量/我們申請的空間 會自動初始化為0。不管是int a,你定義好了這個a之後,也不用去初始化,a裏面的值就是0.你定義一個指針 int * p,p裏面就是NULL. 你定義一個結構體,有多個成員,每個成員都是0.定義一個數組,數組的所有成員都被初始化為0.
2.生命周期與程序共存亡。
像棧區的局部變量,它的作用域就是這個變量所在的{}範圍內,從它定義的這一行開始直到{}結束,這麽一個區域。
而靜態變量是與程序共存亡的,從它創建開始到軟件關閉,這塊空間才會釋放。
3.靜態存儲區的靜態變量在程序運行的時候,在加載資源階段分配空間。
解釋一下"加載資源階段分配空間":一個程序執行入口是主函數,當軟件一打開的時候,不會直接執行主函數的,是要加載一些資源,也就是軟件要運行所必要的資源,加載到內存。
資源加載完了,軟件運行的環境就相當於搭建好了,資源加載完了,開始執行主函數。
即使說靜態變量定義在主函數裏面了,這個變量依然是在程序加載的階段申請空間
全局變量 :
位置:寫在全局的位置。?!
只要不在任何函數內,就叫 全局變量。
全局變量會自動初始化為0.
當然也可以手動初始化成 想要的值。
當全局變量與局部變量重名,在局部位置,局部變量有效。
靜態存儲區與全局變量