要解釋爲何全局變量未初始化爲何是0,而動態局部變量是一個隨機數,就要先弄清楚靜態,動態是什麼,局部,全局又是什麼.而後再思考爲何靜態是0,就要思考它們的存儲方式,所以天然就要了解內存的內部結構,而後瞭解它們的原理,天然就明白了.同時還能就是下初始化和賦值的區別.函數
#初始化和賦值的區別是什麼?.net
#變量的儲存方式:靜態儲存和動態儲存.code
靜態存儲:變量定義的時候,分配了必定的內存單元,在整個程序中,內存單元都不變.只能初始化一次,能夠屢次賦值,靜態存儲變量不初始化則初始爲0.blog
動態存儲:程序執行過程當中才分配內存單元,使用完後就釋放,如形參.函數的形式參數就是動態存儲方式,聲明函數的時候不給它分配內存單元.調用的時候傳入實參,就分配內存單元,而後函數執行完後,就釋放內存.動態存儲變量若不初始化,則初始值爲一個隨機數.內存
##怎麼聲明變量的存儲方式?作用域
全局變量包括全局變量和靜態全局變量,都是靜態存儲,所以未初始值未0,靜態局部變量是靜態存儲,只有動態局部變量是動態存儲.get
加上static前綴就是靜態存儲變量,如static int a = 0;
io
不加static前綴默認就是動態存儲變量,如int b = 1;
(若是是全局變量則因而靜態存儲.)變量
##內存存儲空間的分配:原理
動態存儲區域:即存儲用動態存儲方式的變量的內存區域,如函數形參,沒有加static前綴的局部變量(即動態局部變量),函數返回地址
靜態存儲區域:即存儲用靜態存儲方式的變量的內存區域,如全局變量,靜態全局變量.(沒有動態全局變量)
程序區:存放程序語句.
#變量的做用域:局部和全局.
全局變量:在全部函數外定義(包含主函數),全部函數均能調用.全局變量都是靜態存儲,沒初始化時默認爲0;
局部變量:函數內部定義,只適用於當前函數.沒初始化時,如果靜態存儲,則爲0,如果動態存儲,則爲隨機值.
#靜態全局變量和全局變量的區別?
#靜態局部變量和(動態)局部變量的區別?
做用域相同,但內存釋放週期不一樣.動態局部變量當函數執行結束後,就釋放內存.下次在調用時又能夠對其初始化.初始值爲隨機數.
而靜態局部變量則在整個程序中都不會釋放內存,下一次調用時仍是上一次的值.初始值爲0;
#爲何靜態存儲未初始化時,初始值爲0,而動態則爲一個隨機數?
https://www.zhihu.com/question/49111720
https://blog.csdn.net/u010191034/article/details/39124505