指針常量和常量指針

前面寫了指針數(shù)組和數(shù)組指針母剥,指針函數(shù)和函數(shù)指針◇鲜玻現(xiàn)在又來了一對比較讓人模糊的概念吨悍。還是原來的套路先看英文:

  • 指針常量:constant pointer;即: 常量類型的指針于微,或者也可以說指針類型的常量逗嫡。(int *const p)
  • 常量指針:Pointer to a constant;即:指向常量的指針株依。(const int *p驱证, int const *p)
    (Ps:指向常量的指針:指你不能通過一個常量指針去改變指針指向位置的值;這里有深意后面你會理解恋腕。)

這個問題是有一個巨大的難點抹锄,就是不論是中文還是代碼的寫法,都十分的相似荠藤,甚至說這兩都是指針伙单。以至于我在初學(xué)時費了老大力氣也沒記住。
后來我發(fā)現(xiàn)一個重要的點哈肖,不管我們聲明的是什么吻育,我們聲明的變量p目的是為了使用。現(xiàn)在觀察下面:

// 指針常量
int *const p; 

// 常量指針
const int *p;
int const *p;

我發(fā)現(xiàn):

  • 指針常量:const更接近p淤井,決定了p是一個常量布疼;* 決定了這個常量的類型
  • 常量指針:* 更接近p,決定了p是一個指針;const決定了這個指針指向的值類型

下面看詳細用法:

指針常量:指針類型的常量

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    int a = 5;
    int b = 10;
    // 定義一個指針常量币狠,指針常量本質(zhì)上既是指針又是常量
    // 指針的屬性:決定了它里面存的是地址游两。
    int *const p = &a;
    // 常量的屬性:決定了它只能被賦值一次
    // p = &b; // 再次賦值錯誤

    qDebug() << p << " : " << *p;

    return app.exec();
}

運行結(jié)果

0x73fd1c  :  5

我們發(fā)現(xiàn)指針常量的使用和引用是如此的類似。其實引用就是用指針常量來實現(xiàn)的漩绵。指針和引用的區(qū)別我們后面再說贱案。

常量指針:指向常量的指針

const int a = 1;
static int b = 2;
int b2 = 20;

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
    const int c = 3;
    int c2 = 30;
    int const *p; // 聲明一個常量指針
    p = &a; // 可以指向一個全局的常量
    qDebug() << p << " : " << *p;

    p = &b; // 可以指向一個靜態(tài)變量
    b = 4;
    qDebug() << p << " : " << *p;

    p = &c; // 可以指向一個局部的常量
    qDebug() << p << " : " << *p;

    p = &b2; // 可以指向一個全局的變量
    qDebug() << p << " : " << *p;

    p = &c2; // 可以指向一個局部的變量
    qDebug() << p << " : " << *p;

    // *p = 4; // 不可以通過一個常量指針來改變指向?qū)ο蟮闹怠?    return app.exec();
}

運行結(jié)果:

0x405018  :  1
0x404010  :  4
0x73fc5c  :  3
0x404014  :  20
0x73fc58  :  30

這里我們發(fā)現(xiàn)一個有趣的現(xiàn)象:常量指針可以指向:一個全局的常量、一個靜態(tài)變量渐行、一個局部的常量轰坊、一個全局的變量铸董、一個局部的變量;而唯一不能做的就是你不能通過一個常量指針去改變指針指向位置的值肴沫。
這個常量的意義在這里粟害。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市颤芬,隨后出現(xiàn)的幾起案子悲幅,更是在濱河造成了極大的恐慌,老刑警劉巖站蝠,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件汰具,死亡現(xiàn)場離奇詭異,居然都是意外死亡菱魔,警方通過查閱死者的電腦和手機留荔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來澜倦,“玉大人聚蝶,你說我怎么就攤上這事≡逯危” “怎么了碘勉?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長桩卵。 經(jīng)常有香客問我验靡,道長,這世上最難降的妖魔是什么雏节? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任胜嗓,我火速辦了婚禮,結(jié)果婚禮上矾屯,老公的妹妹穿的比我還像新娘兼蕊。我一直安慰自己,他們只是感情好件蚕,可當(dāng)我...
    茶點故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产禾,像睡著了一般排作。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上亚情,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天妄痪,我揣著相機與錄音,去河邊找鬼楞件。 笑死衫生,一個胖子當(dāng)著我的面吹牛裳瘪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播罪针,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼彭羹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了泪酱?” 一聲冷哼從身側(cè)響起派殷,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎墓阀,沒想到半個月后毡惜,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡斯撮,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年经伙,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片勿锅。...
    茶點故事閱讀 38,643評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡橱乱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粱甫,到底是詐尸還是另有隱情泳叠,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布茶宵,位于F島的核電站危纫,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏乌庶。R本人自食惡果不足惜种蝶,卻給世界環(huán)境...
    茶點故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瞒大。 院中可真熱鬧螃征,春花似錦、人聲如沸透敌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽酗电。三九已至魄藕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撵术,已是汗流浹背背率。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人寝姿。 一個月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓交排,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饵筑。 傳聞我的和親對象是個殘疾皇子埃篓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,509評論 2 348

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