C语言中变量的作用域和生命周期
? ? ? ? 一.作用域和生命周期:
? ? ? ?1.作用域:
? ? ? ?通常來說,一段程序代碼中所用到的名字并不總是有效 / 可用?的。而限定這個名字的可用性的代碼范圍就是這個名字的作用域。俗話說的好,“能力越大,責任也就越大。”,當變量的能力越大時,它能做的事情就很多,涉及的范圍也很廣,當變量能力越小時,則相反。
?? ??? ?2.生命周期:
 ? ? ? ?概念:變量的生命周期指的是變量的創建到變量的銷毀之間的一個時間段。
? ? ? ?生命周期,字面意思上我們可以理解為一個人的壽命期限,就好比說一個人從剛生下的充滿活力嬰兒到油盡燈枯的過程,從有到無,從生到死。變量的生命周期也是如此,從創建下占用內存開始,一直持續到內存的釋放。變量保留其值的時間被稱為變量的生命周期。當變量失去自己的作用域時,它便不再具有值。而上面我們所說的作用域,它就決定了變量的生命周期。說明作用域不同,生命周期也就不一樣。
? ? ? 生命周期好比孫悟空用金箍棒給唐僧畫的一個圈圈,把唐僧保護住,不讓妖怪抓住他,但唐僧也只能呆在圈子里,出不去。而C中的花括號便是起到這樣的效果。
? ??
?對于初學者來說,文字的講解也只能訴說一部分內容,我們并不能get到具體的點。接下來,我們進入VS中試驗一下。
1.首先,我么先來介紹一下全局變量,及其它的作用。
? ? a. 全局變量的作用域是整個工程。? ? ? ?
? ??b. 全局變量的生命周期是:整個程序的生命周期。
?"全局"的意思其實就是縱觀全局,它是定義在代碼塊({ })之外的變量。我們先創建一個主函數,在主函數的外圍創建一個變量a,在主函數內我們創建一條語句去輸出變量a的值,運行后發現a的值為100。
之后我們在main函數外面去創建一些函數test1,test2(這里的函數,我們可以稱之為新開辟的一個范圍,其實main中也是一個范圍!),再去輸出變量a的值,我們可以發現,結果都是100。原因就在于變量a的位置,a處在眾多范圍的最外圍,就好比上帝視角一般,可以清楚的看到每一個范圍中的內容,這便是縱觀全局。
所以說全局變量的作用域范圍是整個工程,那么它的生命周期便可以延續到整個工程結束才會被內存釋放掉。
2. 其次我們來介紹局部變量的作用域和生命周期
? a. 局部變量的作用域是變量所在的局部范圍。
? ? b.?局部變量的生命周期是:進入作用域生命周期開始,出作用域生命周期結束。
? ? ? ? 所謂局部,它只是全局中的一部分東西。它則是定義在代碼塊({ })之內的變量。如圖所示,我在主函數中創建了一個變量num1,將它放在一對花括號里,這兩個花括號構成了一個范圍,整體上去看就是在一個大括號里面又放了一個小括號,那么當在花括號的外圍去輸出num1時,系統顯示報錯,就是因為num1只處在局部范圍中。????????
????????
?
?看完了這些我們就可以明白,局部變量只可作用到它本身的范圍中,不能影響到全局的范圍中,而全局的變量可以作用到到任何一個局部中。這就是作用域的意義。而局部變量的生命周期也只會隨著花括號的建立而出現,到另一個花括號的結束而消失。
3.還有一點需要注意的是:當局部變量與全局變量的名字相同的時候,在范圍中局部變量會被優先選擇,就好比英語中的就近原則一個道理。所以建議不要采用兩個相同名字的全局部變量,不僅容易搞混,還容易產生bug。
?
總結
以上是生活随笔為你收集整理的C语言中变量的作用域和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: Java入门学习笔记4——运行报错及解决
 - 下一篇: 微信小程序修改switch组件的大小