局部變量和 全局變量

變量可以在程序中三個地方說明:?函數(shù)內(nèi)部、函數(shù)的參數(shù)定義中或所有的函數(shù)外部老玛。根據(jù)所定義位置的不同,?變量可分為局部變量、形式參數(shù)和全程變量苟蹈。從空間角度來看,變量可以分為全局變量和局部變量右核,而從時間角度來分的?可以有靜態(tài)存儲變量和動態(tài)存儲變量之分慧脱。

從作用域看:

1>:全局變量具有全局作用域。全局變量只需在一個源文件中定義贺喝,就可以作用于所有的源文件磷瘤。當然,其他不包含全局變量定義的源文件需要用extern 關鍵字再次聲明這個全局變量搜变。

2>:靜態(tài)局部變量具有局部作用域采缚,它只被初始化一次,自從第一次被初始化直到程序運行結(jié)束都一直存在挠他,它和全局變量的區(qū)別在于全局變量對所有的函數(shù)都是可見的扳抽,而靜態(tài)局部變量只對定義自己的函數(shù)體始終可見。

3>:局部變量也只有局部作用域殖侵,它是自動對象(auto)贸呢,它在程序運行期間不是一直存在,而是只在函數(shù)執(zhí)行期間存在拢军,函數(shù)的一次調(diào)用執(zhí)行結(jié)束后楞陷,變量被撤銷,其所占用的內(nèi)存也被收回茉唉。

4>:靜態(tài)全局變量也具有全局作用域固蛾,它與全局變量的區(qū)別在于如果程序包含多個文件的話结执,它作用于定義它的文件里,不能作用到其它文件里艾凯,即被static關鍵字修飾過的變量具有文件作用域献幔。這樣即使兩個不同的源文件都定義了相同名字的靜態(tài)全局變量,它們也是不同的變量趾诗。

?全局變量和局部變量

1蜡感。局部變量

他是?指在函數(shù)內(nèi)部定義的變量?作用域為定義局部變量的函數(shù)?也就是說他只能在定義他的函數(shù)中使用

最值得注意的是?只有在程序執(zhí)行到定義他的模塊時才能生成,一旦執(zhí)行退出該模塊則起變量消失

對于全局變量?如果在定義的時候不做初始化?則系統(tǒng)將自動為起賦值?數(shù)值型為0

字符型為空'/0'

全局變量的弊端?增加內(nèi)存開銷?降低函數(shù)的通用性

定義全局變量時?理想的位置是在文件的開頭?當這些函數(shù)以及同一個程序中的其他源程序文件中的某些函數(shù)需要使用該全局變量時?在函數(shù)內(nèi)部對該變量使用extern?加以說明?說明他是外部的?

對外部變量的說明?只是聲明該變量是在外部定義過的一個全局變量?在這里引用?而對全局變量的定義則是要對起分配存儲單元的

一個全局變量只能定義一次?可是卻可以多次引用

***?在同一源文件中恃泪,全局變量和局部變量同名時郑兴,在局部變量的作用域內(nèi),全局變量不起作用的贝乎。

例如: int ? i=5;

?int ?main()

?{?

? ? printf( "%d\n ",i); ??

? ? add() ?;

? ?printf( "%d\n ",i);?

}

?void ? add()

?{ ?

?int ? i=10; ? printf( "%d\n ",i);

?}?

結(jié)果: 5 10 5??

二杈笔。靜態(tài)存儲變量和動態(tài)存儲變量

對于程序運行期間根據(jù)需要進行臨時動態(tài)分配存儲空間的變量?為動態(tài)存儲變量

對于那些程序運行期間永久占用固定內(nèi)存的變量?稱為靜態(tài)存儲變量

?還要說明的是?程序的指令代碼是存放在程序代碼區(qū)的?靜態(tài)存儲變量是存放在靜態(tài)數(shù)據(jù)區(qū)的?包括全局變量等?而程序中的動態(tài)存儲變量存放在動態(tài)數(shù)據(jù)區(qū)?如函數(shù)的形參以及函數(shù)調(diào)用時的返回地址等

? ?1:局部變量可以與全局變量同名,在函數(shù)內(nèi)引用這個變量時糕非,會用到同名的局部變量,而不會用到全局變量球榆。對于有些編譯器而言朽肥,在同一個函數(shù)內(nèi)可以定義多個同名的局部變量,比如在兩個循環(huán)體內(nèi)都定義一個同名的局部變量持钉,而那個局部變量的作用域就在那個循環(huán)體內(nèi)衡招。

2:全局變量(外部變量)的說明之前再冠以static?就構(gòu)成了靜態(tài)的全局變量。全局變量本身就是靜態(tài)存儲方式每强,靜態(tài)全局變量當然也是靜態(tài)存儲方式始腾。這兩者在存儲方式上并無不同。這兩者的區(qū)別雖在于非靜態(tài)全局變量的作用域是整個源程序空执,當一個源程序由多個源文件組成時浪箭,非靜態(tài)的全局變量在各個源文件中都是有效的。而靜態(tài)全局變量則限制了其作用域辨绊,即只在定義該變量的源文件內(nèi)有效奶栖, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi)门坷,只能為該源文件內(nèi)的函數(shù)公用宣鄙,因此可以避免在其它源文件中引起錯誤。

從以上分析可以看出默蚌,把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式即改變了它的生存期冻晤。把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍绸吸。

3:static函數(shù)與普通函數(shù)作用域不同鼻弧,僅在本文件设江。只在當前源文件中使用的函數(shù)應該說明為內(nèi)部函數(shù)(static),內(nèi)部函數(shù)應該在當前源文件中說明和定義温数。對于可在當前源文件以外使用的函數(shù)绣硝,應該在一個頭文件中說明,要使用這些函數(shù)的源文件要包含這個頭文件

static全局變量與普通的全局變量有什么區(qū)別:static全局變量只初使化一次撑刺,防止在其他文件單元中被引用;

static局部變量和普通局部變量有什么區(qū)別:static局部變量只被初始化一次鹉胖,下一次依據(jù)上一次結(jié)果值;

static函數(shù)與普通函數(shù)有什么區(qū)別:static函數(shù)在內(nèi)存中只有一份够傍,普通函數(shù)在每個被調(diào)用中維持一份拷貝.

static

static稱為靜態(tài)變量甫菠。根據(jù)變量的類型可以分為靜態(tài)局部變量和靜態(tài)全程變量。

1.?靜態(tài)局部變量

它與局部變量的區(qū)別在于:?在函數(shù)退出時,?這個變量始終存在,?但不能被其它函數(shù)使用,?當再次進入該函數(shù)時,?將保存上次的結(jié)果冕屯。其它與局部變量一樣寂诱。?

例如:

? ?void ?test()

?{

? ?int a = 0;

?a++;

printf(“a = %d\n",a);

?staic ?int b;

?b++;

printf(“b = %d\n",b);

}

int main ()

?{

?test ();

test ();

test ();

return 0;

}

結(jié)果為:a = 1,b = 1;

? ? ? ? a = 1, b = 2;

? ? ? ? a = 1, b = 3;

? 變量b的存儲空間一直在安聘,當?shù)诙握{(diào)用函數(shù)時痰洒,不再對b 賦值,而a 要重新進行內(nèi)存分配浴韭。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末丘喻,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子念颈,更是在濱河造成了極大的恐慌泉粉,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榴芳,死亡現(xiàn)場離奇詭異嗡靡,居然都是意外死亡,警方通過查閱死者的電腦和手機窟感,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評論 3 400
  • 文/潘曉璐 我一進店門讨彼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人柿祈,你說我怎么就攤上這事点骑。” “怎么了谍夭?”我有些...
    開封第一講書人閱讀 169,941評論 0 366
  • 文/不壞的土叔 我叫張陵黑滴,是天一觀的道長。 經(jīng)常有香客問我紧索,道長袁辈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,294評論 1 300
  • 正文 為了忘掉前任珠漂,我火速辦了婚禮晚缩,結(jié)果婚禮上尾膊,老公的妹妹穿的比我還像新娘。我一直安慰自己荞彼,他們只是感情好冈敛,可當我...
    茶點故事閱讀 69,295評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著鸣皂,像睡著了一般抓谴。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上寞缝,一...
    開封第一講書人閱讀 52,874評論 1 314
  • 那天癌压,我揣著相機與錄音,去河邊找鬼荆陆。 笑死滩届,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的被啼。 我是一名探鬼主播帜消,決...
    沈念sama閱讀 41,285評論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼浓体!你這毒婦竟也來了泡挺?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,249評論 0 277
  • 序言:老撾萬榮一對情侶失蹤汹碱,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后荞估,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咳促,經(jīng)...
    沈念sama閱讀 46,760評論 1 321
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,840評論 3 343
  • 正文 我和宋清朗相戀三年勘伺,在試婚紗的時候發(fā)現(xiàn)自己被綠了跪腹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,973評論 1 354
  • 序言:一個原本活蹦亂跳的男人離奇死亡飞醉,死狀恐怖冲茸,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情缅帘,我是刑警寧澤轴术,帶...
    沈念sama閱讀 36,631評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站钦无,受9級特大地震影響逗栽,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜失暂,卻給世界環(huán)境...
    茶點故事閱讀 42,315評論 3 336
  • 文/蒙蒙 一彼宠、第九天 我趴在偏房一處隱蔽的房頂上張望鳄虱。 院中可真熱鬧,春花似錦凭峡、人聲如沸拙已。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽倍踪。三九已至,卻和暖如春按价,著一層夾襖步出監(jiān)牢的瞬間惭适,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評論 1 275
  • 我被黑心中介騙來泰國打工楼镐, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留癞志,地道東北人。 一個月前我還...
    沈念sama閱讀 49,431評論 3 379
  • 正文 我出身青樓框产,卻偏偏與公主長得像凄杯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子秉宿,可洞房花燭夜當晚...
    茶點故事閱讀 45,982評論 2 361

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