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