編程中的局部變量,全局變量铣卡,靜態(tài)變量

關(guān)于局部變量链韭、全局變量與靜態(tài)全局變量和靜態(tài)局部變量的比較與分析和拓展:

首先要明白的是局部變量與其它三個(gè)有本質(zhì)區(qū)別。

局部變量煮落,定義在函數(shù)內(nèi)敞峭,作用域?yàn)槎x位置,到所在大括號(hào)結(jié)束蝉仇。 每次執(zhí)行到定義語句的時(shí)候旋讹,系統(tǒng)為該變量分配內(nèi)存,當(dāng)作用域結(jié)束后量淌,內(nèi)存被釋放骗村。

而另外三個(gè)嫌褪,都是在系統(tǒng)運(yùn)行時(shí)就分配內(nèi)存呀枢,在運(yùn)行過程中都不會(huì)釋放,直到程序結(jié)束笼痛。

也就是說裙秋,局部變量和其它三個(gè)琅拌,最明顯的區(qū)別:

1 生命周期不同

2 分配時(shí)間不同

3 分配位置不同。

而另外三個(gè)摘刑,在這幾項(xiàng)上是相同的进宝,之間的區(qū)別在于作用域。

全局變量枷恕,作用域?yàn)檎麄€(gè)項(xiàng)目党晋,不管在哪個(gè)文件中,只要聲明后都可以使用徐块,當(dāng)然未玻,其他不包含全局變量定義的源文件需要用extern 關(guān)鍵字再次聲明這個(gè)全局變量。

靜態(tài)全局變量也具有全局作用域胡控,他與全局變量的區(qū)別在于如果程序包含多個(gè)文件的話扳剿,他作用于定義它的文件里,不能作用到其他文件里昼激,即被static關(guān)鍵字修飾過的變量具有文件作用域庇绽。這樣即使兩個(gè)不同的源文件都定義了相同的靜態(tài)全局變量,他們也是不同的變量橙困。

而靜態(tài)局部變量瞧掺,作用域與普通局部變量一樣,都是定義位置到所在大括號(hào)結(jié)束凡傅。靜態(tài)局部變量具有局部作用域夸盟,它只被初始化一次,自從第一次被初始化直到程序運(yùn)行結(jié)束都一直存在像捶,他和全局變量的區(qū)別在于全局變量對(duì)所有的函數(shù)都是可見的上陕,而靜態(tài)局部變量只對(duì)定義自己的函數(shù)體始終可見。

需要注意的是:

1>全局變量拓春,靜態(tài)局部變量释簿,靜態(tài)全局變量都在靜態(tài)存儲(chǔ)區(qū)分配空間,而局部變量在棧里分配空間硼莽。

2>全局變量本身就是靜態(tài)存儲(chǔ)方式庶溶, 靜態(tài)全局變量當(dāng)然也是靜態(tài)存儲(chǔ)方式。這兩者在存儲(chǔ)方式上并無不同懂鸵。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個(gè)源程序偏螺,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的匆光。而靜態(tài)全局變量則限制了其作用域套像,即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件中不能使用它终息。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi)夺巩,只能為該源文件內(nèi)的函數(shù)公用贞让,因此可以避免在其它源文件中引起錯(cuò)誤。

注釋:static修飾局部變量說明

1)靜態(tài)局部變量屬于靜態(tài)存儲(chǔ)類別,在靜態(tài)存儲(chǔ)區(qū)分配存儲(chǔ)單元柳譬。 在程序整個(gè)運(yùn)行期間都不釋放喳张。自動(dòng)變量(即動(dòng)態(tài)局部變量)屬于動(dòng)態(tài)存儲(chǔ)類別,占動(dòng)態(tài)存儲(chǔ)區(qū)空間,函數(shù)調(diào)用之后即 釋放。

2)對(duì)靜態(tài)局部變量,是在編譯時(shí)候賦初值的,即只付出至一次,在程序運(yùn)行時(shí)它已由初值美澳。以 后每次調(diào)用的時(shí)候不再重新賦初值而只是保留上次函數(shù)調(diào)用結(jié)束時(shí)的值销部。而對(duì)自動(dòng)變量賦初值,不是在編譯的時(shí)候進(jìn)行的,而是在函數(shù)調(diào)用時(shí)進(jìn)行。每調(diào)用一次函數(shù),重新給一個(gè)初值制跟。 相當(dāng)于執(zhí)行一次賦值語句柴墩。靜態(tài)變量會(huì)被放在程序的靜態(tài)數(shù)據(jù)存儲(chǔ)區(qū)里,這樣可以在下一次調(diào)用的時(shí)候還可以保持原來的賦值凫岖。這一點(diǎn)是他與堆棧變量和堆變量的區(qū)別

3)如在定義局部變量時(shí)不賦初值的話,則編譯器對(duì)靜態(tài)變量默認(rèn)賦值為0(整型)或者空字符(字符型) ,對(duì)動(dòng)態(tài)變量只分配內(nèi)存空間,并不會(huì)賦默認(rèn)值,所以里面的值是隨機(jī)的江咳。

4)靜態(tài)局部變量在函數(shù)調(diào)用結(jié)束之后仍然是存在的,但是作用域不變,其他函數(shù)依然不能引用。

關(guān)于static功能的拓展:

1.static與 extern對(duì)函數(shù)的作用:

函數(shù)的本質(zhì)是全局的,寫函數(shù)就是用來調(diào)用的,但是有些時(shí)候不想讓其他文件訪問指定函數(shù)哥放。

根據(jù)函數(shù)能否被其他文件調(diào)用,將函數(shù)分為了內(nèi)部函數(shù)和外部函數(shù)歼指。

內(nèi)部函數(shù):只能被本文件中其他函數(shù)所調(diào)用,成為內(nèi)部函數(shù)。在定義函數(shù)的時(shí)候使用static修飾就可以了甥雕。

外部函數(shù):能被其他文件訪問,定義的時(shí)候在最左邊加關(guān)鍵字extern顯示表示為外部函數(shù),不加則表示隱含的extern踩身。

2.函數(shù)中必須要使用static變量的情況:當(dāng)某函數(shù)的返回值為指針類型時(shí),則必須是static的局部變量的地址作為返回值社露,若為auto類型(參考//注釋:)挟阻,則返回為其指針。局部變量在函數(shù)調(diào)用后就銷毀了峭弟,雖然地址還在附鸽,但是那個(gè)地址存的數(shù)據(jù)是無法保證安全性的,因此如果想指向被調(diào)函數(shù)中的參數(shù)瞒瘸,最好將其定義為靜態(tài)的~

//注釋:

auto在函數(shù)中的局部變量,如果不專門聲明為static存儲(chǔ)類別,都是動(dòng)態(tài)分配存儲(chǔ)空間的,數(shù)據(jù)存儲(chǔ)在動(dòng)態(tài)存儲(chǔ)區(qū)中坷备。函數(shù)中的形參和函數(shù)中的變量都是這種類型的。在調(diào)用該函數(shù)的時(shí)候系統(tǒng)會(huì)給分配內(nèi)存空間,函數(shù)調(diào)用完畢之后,自動(dòng)釋放這些存儲(chǔ)空間情臭。因此這類局部變量稱為自動(dòng)變量省撑。

函數(shù)中,定義auto int a = 10,跟int a = 10等價(jià)Register

關(guān)鍵字regiter請(qǐng)求編譯器盡可能的將變量存在CPU的寄存器中。有以下幾點(diǎn)注意的地方俯在。

register變量必須是能被CPU寄存器所接受的類型,這通常意味著register變量必須是一個(gè)單個(gè)的值,并且其長度應(yīng)小于或等于整型的長度竟秫。但是,有些機(jī)器的寄存器也能存放浮點(diǎn)數(shù)。

register變量可能不存放在內(nèi)存中,所以不能用取址符運(yùn)算符“& ”跷乐。 只有局部變量和形參可以作為register變量,全局變量不行肥败。 靜態(tài)變量不能定義為register。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拙吉,隨后出現(xiàn)的幾起案子潮孽,更是在濱河造成了極大的恐慌揪荣,老刑警劉巖筷黔,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異仗颈,居然都是意外死亡佛舱,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門挨决,熙熙樓的掌柜王于貴愁眉苦臉地迎上來请祖,“玉大人,你說我怎么就攤上這事脖祈∷敛叮” “怎么了?”我有些...
    開封第一講書人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵盖高,是天一觀的道長慎陵。 經(jīng)常有香客問我,道長喻奥,這世上最難降的妖魔是什么席纽? 我笑而不...
    開封第一講書人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮撞蚕,結(jié)果婚禮上润梯,老公的妹妹穿的比我還像新娘。我一直安慰自己甥厦,他們只是感情好纺铭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著刀疙,像睡著了一般彤蔽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上庙洼,一...
    開封第一講書人閱讀 51,190評(píng)論 1 299
  • 那天顿痪,我揣著相機(jī)與錄音,去河邊找鬼油够。 笑死蚁袭,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的石咬。 我是一名探鬼主播揩悄,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鬼悠!你這毒婦竟也來了删性?” 一聲冷哼從身側(cè)響起亏娜,我...
    開封第一講書人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蹬挺,沒想到半個(gè)月后维贺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巴帮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年溯泣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片榕茧。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垃沦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出用押,到底是詐尸還是另有隱情肢簿,我是刑警寧澤,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布蜻拨,位于F島的核電站池充,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏官觅。R本人自食惡果不足惜纵菌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望休涤。 院中可真熱鬧咱圆,春花似錦、人聲如沸功氨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捷凄。三九已至忱详,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間跺涤,已是汗流浹背匈睁。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桶错,地道東北人航唆。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像院刁,于是被迫代替她去往敵國和親糯钙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容