C++ supplement 指針進(jìn)階及const限定符

在上一節(jié)中說(shuō)到了基本的指針的定義與解析,下面便是升級(jí)版,多級(jí)指針的理解:

所謂多級(jí)指針在于有多重的指針導(dǎo)向,因?yàn)橹羔樖且粋€(gè)對(duì)象梗摇,在內(nèi)存中會(huì)分配空間,所以可以定義一個(gè)指針來(lái)指向該指針變量想许,也就是指向指針類(lèi)型的指針伶授。那么在解析的時(shí)候也就需要進(jìn)行多重解析了,第一重解析即得到一級(jí)指針的地址流纹,第二重解析即得到一級(jí)指針?biāo)赶虻膬?nèi)容糜烹。如下圖所示:

1

另外,正如給一般的變量去別名一樣漱凝,既然指針也是一種變量疮蹦,那么也就可以給它取一個(gè)別名啦~~只是這個(gè)時(shí)候一個(gè)變量前面就有多個(gè)修飾符了,為了方便理解茸炒,最簡(jiǎn)便的方法是從右至左來(lái)解讀符號(hào)愕乎,(*&)——改變量是一個(gè)引用型,并且是一個(gè)指針類(lèi)型的引用壁公,如下圖所示:

2

之前在項(xiàng)目編程中感论,也經(jīng)常使用到const限定符來(lái)對(duì)變量進(jìn)行限定,經(jīng)常是在函數(shù)參數(shù)定義時(shí)使用以使得傳遞到函數(shù)的參數(shù)在該函數(shù)處理中原始性不會(huì)被破壞紊册。若定義一個(gè)const修飾的變量時(shí)需要對(duì)其進(jìn)行初始化比肄,該初始化的值可以是其他的已有初始化的變量,或者其他有實(shí)際值的值或表達(dá)式囊陡,之后該值便不能再被修改芳绩。

好了,知道了const的基本用法关斜,下面來(lái)說(shuō)說(shuō)當(dāng)有多個(gè)文件中共享或者單獨(dú)定義const變量的方法:

常規(guī)地示括,在每個(gè)文件中定義的重名的常量型變量其作用域也只在其所在的文件铺浇,但若希望某一個(gè)文件中定義的變量在其他文件中也能共享痢畜,此時(shí)只需在定義時(shí)在其前面加上限定詞extern關(guān)鍵詞,然后在其他文件中聲明時(shí)也添加上extern即可,此時(shí)該文件中的變量可以不用賦初值丁稀,用了extern做修飾則說(shuō)明它的定義在別處吼拥。如下圖:

3

接下來(lái)就來(lái)說(shuō)說(shuō)常量變量的引用問(wèn)題,顧名思義线衫,這種引用是給一個(gè)常量型的變量取一個(gè)別名凿可,但在給其賦值時(shí),常量型的引用類(lèi)型只能是常量型(const int i=0授账;const int &r=i )枯跑,但是,常量型引用的初始化值可以是非常量型的任意表達(dá)式(int ?i=0白热;const int &r=i)敛助,只要最終該表達(dá)式可以轉(zhuǎn)換成一個(gè)確定的值即可。如下圖所示:

在這兒說(shuō)明一下屋确,為什么非const型的引用無(wú)法實(shí)現(xiàn)const型變量對(duì)其賦值纳击。這就要說(shuō)到引用存在的意義了,引用即別名攻臀,也就是通過(guò)對(duì)該別名值的改變同等于對(duì)其綁定值的改變焕数,但是,如果其綁定值為const類(lèi)型刨啸,也就是其值本身就不可變堡赔,那么這種非const型的引用也就失去了意義,所以不存在將const型的變量賦值給非const型的引用设联。

總之加匈,簡(jiǎn)單來(lái)講,就是等號(hào)的左邊有const的情況下仑荐,右邊可以隨意雕拼;但是當(dāng)?shù)忍?hào)的右邊是const型時(shí),則等號(hào)左邊只能是const 型的引用


上面分別說(shuō)明了指針與const限定符粘招,那么下面來(lái)說(shuō)說(shuō)兩者的結(jié)合體吧~~也就是指向常量的指針啥寇。

指向常量的指針(const int*r=&p)即該指針?biāo)赶虻臑槌A啃偷淖兞浚膊⒎欠堑檬浅A坎豢扇髟部梢允欠莄onst型辑甜,也就是等號(hào)左邊有const,但對(duì)于等號(hào)右邊是否為const型并不在意袍冷,其強(qiáng)調(diào)的是磷醋,不能通過(guò)該指針對(duì)其所指的對(duì)象進(jìn)行值的改變,而對(duì)所指對(duì)象并無(wú)特別的要求胡诗。如下圖所示:

說(shuō)完了指針指向const型的變量后邓线,下面來(lái)說(shuō)說(shuō)const指針淌友,因?yàn)橹羔樅鸵米畲蟮牟煌谟谥羔樖菍?duì)象占用內(nèi)存空間,而引用不是對(duì)象骇陈,在內(nèi)存中是沒(méi)有單獨(dú)地址的震庭,所以可以將指針定義成const常量型。與一般的常量型變量一樣你雌,在定義時(shí)需要賦初值器联,而且一旦該指針變量所存的地址值確定后則不能再被改變(int i=0;int *const p=&i)婿崭,如下圖所示:

需要注意的是:

也就是const型指針?biāo)娴牡刂分挡荒鼙桓淖儾ν兀渌笇?duì)象的值是否能被改變則取決于該變量是否為const型。在這兒就牽涉到了頂層const與底層const的概念氓栈,所謂頂層與底層千元,指的是const所在的層次級(jí)別,頂層即常見(jiàn)的常量型直接定義變量颤绕,底層是針對(duì)常量型引用以及指向const類(lèi)型的指針而言的幸海。如下圖所示:

好了,對(duì)于const限定符其繞來(lái)繞去也就是三種簡(jiǎn)單情況的組合奥务,

1:變量直接定義成const常量型物独,并初始化(const int i=1)

2、const與引用的組合:const int &a=i氯葬;

3挡篓、const與指針的組合:const int *p=&p ? ?int *const p=&p

以上三種即為最基本的const限定符的使用,這些const均為頂層const帚称,其他的更復(fù)雜的組合方式即為這三種基本方式的結(jié)合官研,如: const int*&b=p(p也可以不是const類(lèi)型的),const int * const c=p(p也可以不是const類(lèi)型的)

那么針對(duì)更復(fù)雜的組合 闯睹,記住從右往左讀各個(gè)限定符一層層的理解即可~

下面再來(lái)了解一下常量表達(dá)式(constexpr):

在這兒值得注意的是戏羽,在對(duì)指針的修飾中,constexpr不能簡(jiǎn)單地用const替換楼吃,因?yàn)閏onstexpr只用來(lái)限定指針是常量而對(duì)其所指的內(nèi)容不作限定始花,如下圖:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市孩锡,隨后出現(xiàn)的幾起案子酷宵,更是在濱河造成了極大的恐慌,老刑警劉巖躬窜,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浇垦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡荣挨,警方通過(guò)查閱死者的電腦和手機(jī)男韧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén)朴摊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人煌抒,你說(shuō)我怎么就攤上這事〔薇叮” “怎么了寡壮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)讹弯。 經(jīng)常有香客問(wèn)我况既,道長(zhǎng),這世上最難降的妖魔是什么组民? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任棒仍,我火速辦了婚禮,結(jié)果婚禮上臭胜,老公的妹妹穿的比我還像新娘莫其。我一直安慰自己,他們只是感情好耸三,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布乱陡。 她就那樣靜靜地躺著,像睡著了一般仪壮。 火紅的嫁衣襯著肌膚如雪憨颠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天积锅,我揣著相機(jī)與錄音爽彤,去河邊找鬼。 笑死缚陷,一個(gè)胖子當(dāng)著我的面吹牛适篙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播箫爷,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼匙瘪,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了蝶缀?” 一聲冷哼從身側(cè)響起丹喻,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎翁都,沒(méi)想到半個(gè)月后碍论,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡柄慰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年鳍悠,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了税娜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡藏研,死狀恐怖敬矩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蠢挡,我是刑警寧澤弧岳,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站业踏,受9級(jí)特大地震影響禽炬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜勤家,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一腹尖、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧伐脖,春花似錦热幔、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至巫俺,卻和暖如春认烁,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背介汹。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工却嗡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人嘹承。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓窗价,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親叹卷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撼港,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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