C語言中Static和Const關(guān)鍵字的的作用

程序的局部變量存在于(堆棧)中莹痢,全局變量存在于(靜態(tài)區(qū) )中种蘸,動態(tài)申請數(shù)據(jù)存在于( 堆)中。

字寫的不好不要取笑哈

補充:堆和棧的概念

因為:Objective-C的對象在內(nèi)存中是以堆的方式分配空間的,并且堆內(nèi)存是由你釋放的竞膳,就是release航瞭,OC對象存放于堆里面(堆內(nèi)存要程序員手動回收),非OC對象一般放在棧里面(棧內(nèi)存會被系統(tǒng)自動回收)坦辟,堆里面的內(nèi)存是動態(tài)分配的刊侯,所以也就需要程序員手動的去添加內(nèi)存、回收內(nèi)存

static作用:“改變生命周期” 或者 “改變作用域”

1.作用于變量:

用static聲明局部變量-------局部變量指在代碼塊{}內(nèi)部定義的變量锉走,只在代碼塊內(nèi)部有效(作用域)滨彻,其缺省的存儲方式是自動變量或說是動態(tài)存儲的,即指令執(zhí)行到變量定義處時才給變量分配存儲單元挪蹭,跳出代碼塊時釋放內(nèi)存單元(生命期)亭饵。用static聲明局部變量時,則改變變量的存儲方式(生命期)梁厉,使變量成為靜態(tài)的局部變量冬骚,即編譯時就為變量分配內(nèi)存,直到程序退出才釋放存儲單元。這樣只冻,使得該局部變量有記憶功能庇麦,可以記憶上次的數(shù)據(jù),不過由于仍是局部變量喜德,因而只能在代碼塊內(nèi)部使用(作用域不變)山橄。

用static聲明外部變量-------外部變量指在所有代碼塊{}之外定義的變量,它缺省為靜態(tài)變量舍悯,編譯時分配內(nèi)存航棱,程序結(jié)束時釋放內(nèi)存單元。同時其作用域很廣萌衬,整個文件都有效甚至別的文件也能引用它饮醇。為了限制某些外部變量的作用域,使其只在本文件中有效秕豫,而不能被其他文件引用朴艰,可以用static關(guān)鍵字對其作出聲明。

總結(jié):用static聲明局部變量混移,使其變?yōu)殪o態(tài)存儲方式(靜態(tài)數(shù)據(jù)區(qū))祠墅,作用域不變;用static聲明外部變量歌径,其本身就是靜態(tài)變量毁嗦,這只會改變其連接方式,使其只在本文件內(nèi)部有效回铛,而其他文件不可連接或引用該變量狗准。

2.作用于函數(shù):

使用static用于函數(shù)定義時,對函數(shù)的連接方式產(chǎn)生影響茵肃,使得函數(shù)只在本文件內(nèi)部有效驶俊,對其他文件是不可見的。這樣的函數(shù)又叫作靜態(tài)函數(shù)免姿。使用靜態(tài)函數(shù)的好處是,不用擔心與其他文件的同名函數(shù)產(chǎn)生干擾榕酒,另外也是對函數(shù)本身的一種保護機制胚膊。

如果想要其他文件可以引用本地函數(shù),則要在函數(shù)定義時使用關(guān)鍵字extern想鹰,表示該函數(shù)是外部函數(shù)紊婉,可供其他文件調(diào)用。另外在要引用別的文件中定義的外部函數(shù)的文件中辑舷,使用extern聲明要用的外部函數(shù)即可喻犁。


一、const與宏的區(qū)別(面試題):

const簡介:之前常用的字符串常量,一般是抽成宏肢础,但是蘋果不推薦我們抽成宏还栓,推薦我們使用const常量。

編譯時刻:宏是預編譯(編譯之前處理)传轰,const是編譯階段剩盒。

編譯檢查:宏不做檢查,不會報編譯錯誤慨蛙,只是替換辽聊,const會編譯檢查,會報編譯錯誤期贫。

宏的好處:宏能定義一些函數(shù)跟匆,方法。 const不能通砍。

宏的壞處:使用大量宏玛臂,容易造成編譯時間久,每次都需要重新替換埠帕。

注意:很多Blog都說使用宏垢揩,會消耗很多內(nèi)存,我這驗證并不會生成很多內(nèi)存敛瓷,宏定義的是常量叁巨,常量都放在常量區(qū),只會生成一份內(nèi)存呐籽。

二锋勺、const作用:限制類型

1.const僅僅用來修飾右邊的變量(基本數(shù)據(jù)變量p,指針變量*p)

2.被const修飾的變量是只讀的狡蝶。


三庶橱、const開發(fā)中使用場景:

1.需求1:提供一個方法,這個方法的參數(shù)是地址贪惹,里面只能通過地址讀取值,不能通過地址修改值

2.需求2:提供一個方法苏章,這個方法的參數(shù)是地址,里面不能修改參數(shù)的地址奏瞬。


四枫绅、static和extern簡單使用(要使用一個東西,先了解其作用)

static作用:

修飾局部變量:

1.延長局部變量的生命周期,程序結(jié)束才會銷毀硼端。

2.局部變量只會生成一份內(nèi)存,只會初始化一次并淋。

修飾全局變量:

1.只能在本文件中訪問,修改全局變量的作用域,生命周期不會改

2.避免重復定義全局變量

extern作用:

只是用來獲取全局變量(包括全局靜態(tài)變量)的值,不能用于定義變量

extern工作原理:

先在當前文件查找有沒有全局變量珍昨,沒有找到县耽,才會去其他文件查找句喷。

五、static與const聯(lián)合使用

static與const作用:聲明一個只讀的靜態(tài)變量

開發(fā)使用場景:在一個文件中經(jīng)常使用的字符串常量兔毙,可以使用static與const組合

六唾琼、extern與const聯(lián)合使用開發(fā)中使用場景:在多個文件中經(jīng)常使用的同一個字符串常量,可以使用extern與const組合瞒御。原因:static與const組合:在每個文件都需要定義一份靜態(tài)全局變量父叙。extern與const組合:只需要定義一份全局變量,多個文件共享肴裙。全局常量正規(guī)寫法:開發(fā)中便于管理所有的全局變量趾唱,通常搞一個GlobeConst文件,里面專門定義全局變量蜻懦,統(tǒng)一管理甜癞,要不然項目文件多不好找。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末宛乃,一起剝皮案震驚了整個濱河市悠咱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌征炼,老刑警劉巖析既,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谆奥,居然都是意外死亡眼坏,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門酸些,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宰译,“玉大人,你說我怎么就攤上這事魄懂⊙爻蓿” “怎么了?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵市栗,是天一觀的道長缀拭。 經(jīng)常有香客問我,道長填帽,這世上最難降的妖魔是什么蛛淋? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮盲赊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敷扫。我一直安慰自己哀蘑,他們只是感情好诚卸,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绘迁,像睡著了一般合溺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上缀台,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天棠赛,我揣著相機與錄音,去河邊找鬼膛腐。 笑死睛约,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的哲身。 我是一名探鬼主播辩涝,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼勘天!你這毒婦竟也來了怔揩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤脯丝,失蹤者是張志新(化名)和其女友劉穎商膊,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宠进,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡晕拆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了砰苍。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片潦匈。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖赚导,靈堂內(nèi)的尸體忽然破棺而出茬缩,到底是詐尸還是另有隱情,我是刑警寧澤吼旧,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布凰锡,位于F島的核電站,受9級特大地震影響圈暗,放射性物質(zhì)發(fā)生泄漏掂为。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一员串、第九天 我趴在偏房一處隱蔽的房頂上張望勇哗。 院中可真熱鬧,春花似錦寸齐、人聲如沸欲诺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扰法。三九已至蛹含,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塞颁,已是汗流浹背浦箱。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留祠锣,地道東北人酷窥。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像锤岸,于是被迫代替她去往敵國和親竖幔。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 注:這是第三遍讀《C語言深度解剖》,想想好像自從大學開始就沒讀完過幾本書,其中譚浩強的那本《C語言程序設(shè)計(第四版...
    HavenXie閱讀 1,723評論 1 6
  • C++關(guān)鍵字的思考 本章內(nèi)容:1 關(guān)鍵字的相關(guān)理解1.1 const關(guān)鍵字1.2 static關(guān)鍵字1.3 非局部...
    Haley_2013閱讀 774評論 0 50
  • 1. 塞上謠 飄花不似人間物冻辩, 飛天散載處處涼。 回問塞上幾時暖馋评? 雪肆無應只顧旋。 2. 殘途 趙關(guān)士...
    陳汐年閱讀 3,389評論 25 34
  • 記得那年高一的時候蜕青,下晚自習,跟幾個朋友一起下樓梯像以前一樣有說有笑糊渊,或許是樓梯太小我們聲音太大右核,您的一回頭,我看...
    biu踢福閱讀 164評論 0 1
  • 寫作是很頭痛的事渺绒,特別是業(yè)余寫手要保持持續(xù)的更新有相當大的困難贺喝。話題、內(nèi)容宗兼、構(gòu)架等等都好像是不可逾越的鴻溝躏鱼。日記體...
    云飛贏家學堂童子軍閱讀 156評論 0 0