c++ 常量指針 const*const

1.什麼是常量指針
我們可以使用const 來修飾指針,在用const 修飾指針時,我們可以指出,指針自身,指針所指的內容,爲常量 const。當const修飾指針時,如果關鍵字const出現在 星號* 左邊 表示的是指針所指的內容爲常量,如果關鍵字const 出現在星號* 右邊 表示的是指針本身爲常量。如果const出現在星號*兩邊 表示 指針本身 和指針所指的內容都爲常量,不能被修改。爲了更清楚地說明const是如何修飾指針的,請看以下代碼

#include<iostream>
using namespace std;

//測試 const關鍵字修飾指針
int main(void){

    int a = 3;//定義了一個整形變量a 並且用3來初始化變量a 這裏a的     
              //值爲3
    int b = 4;//定義了一個整形變量b ,用4來初始化變量 b 這裏b 
              //的值爲4
    int *pa = &a;//定義了一個指向整形的指針變量pa ,pa指向a 的
                 //地址 此時pa的值爲 a的地址&a ,*pa 的值爲3
                 //此時因爲星號*前面和後面都沒有const修飾,所以   
                 //不管是指針變量pa還是指針pa所指物都可以發生改    
                 //變


//指針本身發生改變

    pa = &b;//此時指針變量pa的指向發生了改變,把變量b的地址賦值給
           //了pa 是合法的,此時pa 的值爲b的地址&b,*pa 的值爲   
           //變量b的值4

//指針所指的內容發生改變

    *pa = a;//此時指針變量pa的指向沒有發生改變,還是指向上一指令b
            //的地址,但是指針所指的內容已經由變量b 變爲變量a 此
            //時*pa的值爲變量a的值3

//const 修飾指針本身 指針本身不能發生改變,指針所指的內容可以改變 

    int* const pc = &a;//定義了一個指向整形變量的常指針pc,並且
                       //把變量a的地址&a 賦給 pc 此時 pc 指   
                       //向變量a的地址&a,*pc 的值爲變量a 等
                       //於3
    //pc = &b;      //編譯器報錯,表達式必須是可修改的左值,因爲               
                    //pc 爲常指針,指針本身不能發生改變
    *pc = b;      //可以通過,指針pc 所指的內容是可變的,此時把 
                  //變量b 賦給 pc所指的內容,*pc 此時由a的值3
                  //變爲b的值4


//const 修飾指針所指的內容,把const放在* 左邊,此時指針本身pd可以發生改變,指針所指物*pd不能發生改變

     const int * pd = &a;//定義另一個指針變量pd ,pd所指的內容*pd爲常量,並且把變量a的地址&a 賦給pd ,此時指針變量pd 的值爲變量a的地址&a
    //*pd = b;//編譯器報錯  “不能給常量賦值”此時 指針變量pd所指的內容爲常量,不能發生改變


    //const 既修飾指針本身 又修飾指針所指的內容 

     const int* const pe = &a;//此時定義了一個指向常量型的指針常量 pe ,並且把變量a的地址賦&a 賦值給pe,此時無論指針pe 還是指針pe所指的內容都不能發生改變

    //pe = &b; //編譯器報錯 “表達式必須爲可修改的左值” 
    // *pe = b;// 編譯器報錯 “表達式必須爲可修改的左值”



    cout << *pa <<endl;




    return 0;
}

2.怎麼使用常量指針?
因爲常量定義式通常被放在頭文件內(以便被不同的源碼引入)
,因此有必要將指針 (而不是指針所指的內容)聲明爲const
如 int const b = &a;如果在頭文件內定義一個常量(不變的量)const必須寫兩次, 如: const int const b = &a ;

發佈了31 篇原創文章 · 獲贊 15 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章