static 靜態(tài)變量的理解

靜態(tài)變量 類型說明符是static磕潮。

靜態(tài)變量屬于靜態(tài)存儲方式抱怔,其存儲空間為內(nèi)存中的靜態(tài)數(shù)據(jù)區(qū)(在靜態(tài)存儲區(qū)內(nèi)分配存儲單元)跺嗽,該區(qū)域中的數(shù)據(jù)在整個程序的運行期間一直占用這些存儲空間(在程序整個運行期間都不釋放)得问,也可以認為是其內(nèi)存地址不變,直到整個程序運行結(jié)束(相反丈氓,而auto自動變量周循,即動態(tài)局部變量,屬于動態(tài)存儲類別万俗,占動態(tài)存儲空間湾笛,函數(shù)調(diào)用結(jié)束后即釋放。靜態(tài)變量雖在程序的整個執(zhí)行過程中始終存在闰歪,但是在它作用域之外不能使用嚎研。

另外,屬于靜態(tài)存儲方式的量不一定就是靜態(tài)變量库倘。 例如:外部變量雖屬于靜態(tài)存儲方式临扮,但不一定是靜態(tài)變量论矾,必須由 static加以定義后才能成為靜態(tài)外部變量,或稱靜態(tài)全局變量杆勇。

所有的全局變量都是靜態(tài)變量贪壳,而局部變量只有定義時加上類型修飾符static,才為局部靜態(tài)變量蚜退。

靜態(tài)變量可以在任何可以申請的地方申請闰靴,一旦申請成功后,它將不再接受其他的同樣申請关霸。

靜態(tài)變量并不是說其就不能改變值传黄,不能改變值的量叫常量。 其擁有的值是可變的 队寇,而且它會保持最新的值。說其靜態(tài)章姓,是因為它不會隨著函數(shù)的調(diào)用和退出而發(fā)生變化佳遣。即上次調(diào)用函數(shù)的時候,如果我們給靜態(tài)變量賦予某個值的話凡伊,下次函數(shù)調(diào)用時零渐,這個值保持不變。

一系忙、靜態(tài)局部變量:

1诵盼、 Static類內(nèi)部變量同auto自動變量(即未加 Static 聲明的局部變量)一樣,是某個特定函數(shù)的局部變量银还,即只能在定義該變量的函數(shù)內(nèi)使用該變量风宁,2者作用域相同;兩者的不同在于:auto自動變量會隨著函數(shù) 被調(diào)用和退出而存在和消失蛹疯,而static類局部變量不會戒财,它不管其所在的函數(shù)是否被調(diào)用,都將一直存在捺弦;不過饮寞,盡管該變量還繼續(xù)存在,但不能使用它列吼。倘 若再次調(diào)用定義它的函數(shù)時幽崩,它又可繼續(xù)使用,而且保存了前次被調(diào)用后留下的值寞钥。換言之慌申,Static類型的內(nèi)部變量是一種只能在某個特定函數(shù)中使用,但一 直占據(jù)存儲空間的變量凑耻。

2太示、函數(shù)體內(nèi)如果在定義靜態(tài)變量的同時進行了初始化柠贤,則以后程序不再進行初始化操作(出現(xiàn)在函數(shù)內(nèi)部的基本類型的的靜態(tài)變量初始化語句只有在第一次調(diào)用才執(zhí)行)。而對自動變量賦初值是在函數(shù)調(diào)用時進行类缤,每調(diào)用一次函數(shù)重新給一次初值臼勉,相當于執(zhí)行一次賦值語句。

3餐弱、靜態(tài)局部變量的初始化表達式必須是一個常量或者常量表達式宴霸。即使局部靜態(tài)變量定義時沒有賦初值,系統(tǒng)會自動賦初值0(對數(shù)值型變量)或空字符(對字符變量)膏蚓;靜態(tài)變量的初始值為0瓢谢。而對自動變量auto來說,如果不賦初值則它的值將是個不確定的值驮瞧。

4氓扛、當多次調(diào)用一個函數(shù)且要求在調(diào)用之間保留某些變量的值時,可考慮采用靜態(tài)局部變量论笔。雖然用全局變量也可以達到上述目的采郎,但全局變量有時會造成意外的副作用,因此仍以采用局部靜態(tài)變量為宜狂魔。

注:局部靜態(tài)變量占用內(nèi)存時間較長蒜埋,并且可讀性差,因此最楷,除非必要整份,盡量避免使用局部靜態(tài)變量。

二籽孙、靜態(tài)全局變量

全局變量(外部變量)的說明之前再冠以static 就構(gòu)成了靜態(tài)的全局變量烈评。

全局變量本身就是靜態(tài)存儲方式,靜態(tài)全局變量當然也是靜態(tài)存儲方式蚯撩。

這兩者在存儲方式上并無不同础倍。

這兩者的區(qū)別雖在于:

1、非靜態(tài)全局變量的作用域是整個源程序胎挎,當一個源程序由多個源文件組成時沟启,非靜態(tài)的全局變量在各個源文件中都是有效的。

2犹菇、靜態(tài)全局變量則限制了其作用域德迹, 即只在定義該變量的源文件內(nèi)有效,在同一源程序的其它源文件(即聲明了該變量的CPP文件,或包含該變量聲明頭文件的CPP文件)中不能使用它揭芍。

由于靜態(tài)全局變量的作用域局限于一個源文件內(nèi)胳搞,只能為該源文件內(nèi)的函數(shù)公用,因此可以避免在其它源文件中引起錯誤。

從以上分析可以看出————

把局部變量改變?yōu)殪o態(tài)變量后是改變了它的存儲方式肌毅,即改變了它的生存期筷转。

把全局變量改變?yōu)殪o態(tài)變量后是改變了它的作用域,限制了它的使用范圍悬而。

因此static這個說明符在不同的地方所起的作用是不同的呜舒。應(yīng)予以注意。

關(guān)于Static關(guān)鍵字

1.靜態(tài)變量笨奠,分配在靜態(tài)存儲區(qū)袭蝗,在數(shù)據(jù)段中。函數(shù)退出之后般婆,變量值不變到腥。

2.作用域,全局的靜態(tài)變量蔚袍、靜態(tài)函數(shù)只能在本文件中使用乡范。(不同于一般全局變量)

局部的靜態(tài)變量同函數(shù)的局部變量

五大內(nèi)存分區(qū)(貌似與編譯原理中不一樣,不過道理是一樣的,實際存在的東西總是會與理論有一定差距的)

1.在C++中,內(nèi)存分成5個區(qū)页响,他們分別是堆篓足、棧、自由存儲區(qū)闰蚕、全局/靜態(tài)存儲區(qū)和常量存儲區(qū)。

2.棧连舍,就是那些由編譯器在需要的時候分配没陡,在不需要的時候自動清除的變量的存儲區(qū)。里面的變量通常是局部變量索赏、函數(shù)參數(shù)等盼玄。

3.堆,就是那些由new分配的內(nèi)存塊潜腻,他們的釋放編譯器不去管埃儿,由我們的應(yīng)用程序去控制,一般一個new就要對應(yīng)一個delete融涣。如果程序員沒有釋放掉童番,那么在程序結(jié)束后,操作系統(tǒng)會自動回收威鹿。

4.自由存儲區(qū)剃斧,就是那些由malloc等分配的內(nèi)存塊,他和堆是十分相似的忽你,不過它是用free來結(jié)束自己的生命的幼东。

5.全局/靜態(tài)存儲區(qū),全局變量和靜態(tài)變量被分配到同一塊內(nèi)存中,在以前的C語言中根蟹,全局變量又分為初始化的和未初始化的脓杉,在C++里面沒有這個區(qū)分了,他們共同占用同一塊內(nèi)存區(qū)简逮。

6.常量存儲區(qū)球散,這是一塊比較特殊的存儲區(qū),他們里面存放的是常量买决,不允許修改(當然沛婴,你要通過非正當手段也可以修改,而且方法很多)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末督赤,一起剝皮案震驚了整個濱河市嘁灯,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躲舌,老刑警劉巖丑婿,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異没卸,居然都是意外死亡羹奉,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門约计,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诀拭,“玉大人,你說我怎么就攤上這事煤蚌「ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵尉桩,是天一觀的道長筒占。 經(jīng)常有香客問我,道長蜘犁,這世上最難降的妖魔是什么翰苫? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮这橙,結(jié)果婚禮上奏窑,老公的妹妹穿的比我還像新娘。我一直安慰自己析恋,他們只是感情好良哲,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著助隧,像睡著了一般筑凫。 火紅的嫁衣襯著肌膚如雪滑沧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天巍实,我揣著相機與錄音滓技,去河邊找鬼。 笑死棚潦,一個胖子當著我的面吹牛令漂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丸边,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼叠必,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了妹窖?” 一聲冷哼從身側(cè)響起纬朝,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎骄呼,沒想到半個月后共苛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡蜓萄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年隅茎,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫉沽。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡辟犀,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绸硕,到底是詐尸還是另有隱情踪蹬,我是刑警寧澤,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布臣咖,位于F島的核電站,受9級特大地震影響漱牵,放射性物質(zhì)發(fā)生泄漏夺蛇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一酣胀、第九天 我趴在偏房一處隱蔽的房頂上張望刁赦。 院中可真熱鬧,春花似錦闻镶、人聲如沸甚脉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽牺氨。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間猴凹,已是汗流浹背夷狰。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留郊霎,地道東北人沼头。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像书劝,于是被迫代替她去往敵國和親进倍。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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