話說存儲類關(guān)鍵字

最近在整理知識結(jié)構(gòu)塞赂,就隨便分享一下,如果有什么錯誤剂跟,歡迎糾正减途!
博客原文
歡迎點(diǎn)擊

存儲類關(guān)鍵字(用于修飾變量)

auto(自動變量)

  1. auto即平時的局部變量關(guān)鍵字,可以省略曹洽,故定義局部變量時都沒有寫
  2. 分配在內(nèi)存中的棧上

register(寄存器變量)

  • 這個不是很常用
  1. 編譯器會將其所修飾的變量盡量分配在寄存器中(使其變量的讀寫效率會變高)
  2. 由于寄存器數(shù)量有限鳍置,關(guān)鍵字所修飾的變量不一定都放在寄存器內(nèi)

static(靜態(tài)變量)

  • 修飾變量
    1. 修飾全局變量
    2. 修飾局部變量
  • 修飾函數(shù)
修飾類別 形成 分配位置 生命周期 鏈接屬性
局部變量 靜態(tài)局部變量 數(shù)據(jù)段/BSS段 代碼塊作用域 無鏈接
全局變量 靜態(tài)全局變量 數(shù)據(jù)段/BSS段 文件作用域 內(nèi)鏈接
函數(shù) 靜態(tài)函數(shù) 在其聲明文件 文件作用域 內(nèi)鏈接

extern(外部變量)

  • 修飾全局變量,用于文件作用域以外訪問

const(只讀變量)

  1. 其所修飾的變量存儲在只讀變量區(qū)送淆,在C中仍然是變量(C++中税产,是只讀常量)
  2. 編譯器通常將const保存在符號表中而非分配存儲空間薇搁,從而節(jié)省了空間欧漱,提高了效率(例子:函數(shù)傳參聲明為const指針--另外一個就是防止該指針在函數(shù)體內(nèi)被意外修改)
就近原則 解釋
const int a; a是常整型數(shù)蹬叭,a不可變
const int *a; a是指向一個常整型數(shù)的指針核行,a所指內(nèi)容不可變
int *const a; a是指向一個整型數(shù)的常指針稠集,a不可變
const int* const a; a是指向一個常整型數(shù)的常指針名惩,a及其所指內(nèi)容都不可變

修改const修飾的變量(在GCC環(huán)境中)

在GCC中续捂,const是通過編譯器在編譯的時候執(zhí)行檢查來確保實現(xiàn)的(即改const類型變量是編譯錯誤眷蜈,而非運(yùn)行時錯誤)
GCC編譯器把const類型的變量放在了數(shù)據(jù)段谒出,只是通過編譯器認(rèn)定這個變量是const的隅俘,運(yùn)行時并沒有標(biāo)記const標(biāo)志,故只要騙過編譯器笤喳,const變量就可以修改了为居。

const int a = 5;
int *p;
p = (int *)&a;      
*p = 6;
printf("a = %d. \n", a);

volatile(易變變量)

  • 用以修飾一個可以被編譯器之外改變的變量,告訴編譯器不對改變量的訪問進(jìn)行優(yōu)化

編譯器之內(nèi):當(dāng)前程序上下文的控制流(即當(dāng)前代碼)
編譯器之外:中斷ISR中引用的變量杀狡、多線程中共用的變量蒙畴、硬件會更改的變量。(編譯器在編譯時無法預(yù)知的更改)

typedef(自定義數(shù)據(jù)類型變量)

自定義數(shù)據(jù)類型(不要與#define相混淆)

typedef int *Pint;    const Pint p;
typedef int *Pint;    Pint const p;
  • 以上兩個皆相當(dāng)于 int *const p; 即p皆為常指針
    很多初學(xué)者都很難去記住上面的兩個關(guān)系呜象,是因為又與#define相混淆了膳凝,還沒有完全理解typedef這個關(guān)鍵字
    原理如下:
  • 編譯器在解析的時候會忽略數(shù)據(jù)類型,直接修飾p恭陡,因此以上兩個式子都可以看為 Pint const p;
  • 如果實在想不通鸠项,就想想 const int i;int const i; 為什么是相同的

restrict

  • 只用于修飾指針;其告知編譯器子姜,所有修改該指針?biāo)赶騼?nèi)容的操作全部是基于該指針的祟绊,即不存在其他進(jìn)行修改操作的途徑
    看不懂,是不是哥捕?其實它的作用就是為了幫助編譯器進(jìn)行更好的代碼優(yōu)化牧抽。

該關(guān)鍵字用得少,慎用

:本文內(nèi)容部分來自互聯(lián)網(wǎng)整理遥赚,部分來自個人經(jīng)驗總結(jié)扬舒;本文將持續(xù)收集更新,歡迎留言補(bǔ)充凫佛!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末讲坎,一起剝皮案震驚了整個濱河市孕惜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晨炕,老刑警劉巖衫画,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓮栗,居然都是意外死亡削罩,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進(jìn)店門费奸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來弥激,“玉大人,你說我怎么就攤上這事愿阐∥⒎” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵缨历,是天一觀的道長职辨。 經(jīng)常有香客問我,道長戈二,這世上最難降的妖魔是什么舒裤? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮觉吭,結(jié)果婚禮上腾供,老公的妹妹穿的比我還像新娘。我一直安慰自己鲜滩,他們只是感情好伴鳖,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著徙硅,像睡著了一般榜聂。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嗓蘑,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天须肆,我揣著相機(jī)與錄音,去河邊找鬼桩皿。 笑死豌汇,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泄隔。 我是一名探鬼主播拒贱,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了逻澳?” 一聲冷哼從身側(cè)響起闸天,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斜做,沒想到半個月后苞氮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陨享,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年葱淳,在試婚紗的時候發(fā)現(xiàn)自己被綠了钝腺。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抛姑。...
    茶點(diǎn)故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艳狐,靈堂內(nèi)的尸體忽然破棺而出定硝,到底是詐尸還是另有隱情,我是刑警寧澤毫目,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布蔬啡,位于F島的核電站,受9級特大地震影響镀虐,放射性物質(zhì)發(fā)生泄漏箱蟆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一刮便、第九天 我趴在偏房一處隱蔽的房頂上張望空猜。 院中可真熱鬧,春花似錦恨旱、人聲如沸辈毯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谆沃。三九已至,卻和暖如春仪芒,著一層夾襖步出監(jiān)牢的瞬間唁影,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工掂名, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夭咬,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓铆隘,卻偏偏與公主長得像卓舵,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子膀钠,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評論 2 348

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

  • 注:這是第三遍讀《C語言深度解剖》掏湾,想想好像自從大學(xué)開始就沒讀完過幾本書裹虫,其中譚浩強(qiáng)的那本《C語言程序設(shè)計(第四版...
    HavenXie閱讀 1,717評論 1 6
  • 關(guān)鍵詞/關(guān)鍵類 1.#import跟#include有什么區(qū)別,@class呢融击,#import<>跟#import...
    丶逐漸閱讀 1,427評論 0 1
  • 對于連續(xù)兩個右尖括號>, 那么它們之間需要一個空格來進(jìn)行分隔尊浪,以避免發(fā)生編譯時的錯誤匣屡。 C++98編譯器會把>>優(yōu)...
    認(rèn)真學(xué)計算機(jī)閱讀 1,207評論 0 7
  • 時光在等待中流逝,很慢又很快拇涤。 整整一下午的時光捣作,都留在了那里,事情還沒有進(jìn)展鹅士,貌似這一下午根本不存在券躁,這到底是哪...
    cc08閱讀 367評論 0 0
  • 「你和自己聊過嗎? 」 在夜深人靜的時候掉盅,躺在床上也拜,與自己的心去對話 1、問問自己:這輩子到底想要什么趾痘? 這是很重...
    彭銘杰閱讀 353評論 0 7