1. 程式人生 > >C/C++中的常量指標和指標常量

C/C++中的常量指標和指標常量

常量指標

常量指標是指向常量的指標,指標指向的記憶體地址的內容是不可修改的。

常量指標定義“const int *p=&a;”告訴編譯器,*p是常量,不能將*p作為左值進行操作。但這裡的指標p還是一個變數,它的內容存放常量的地址,所以先宣告常量指標再初始化是允許的,指標也是允許修改的,例如:

int a=0,b=1;
const int *p;  //宣告常量指標p
p=&a;            //p指向a
p=&b;            //修改指標p讓其指向b,允許
*p=2;            //不允許

指標常量
int a=0,b=1;
int *const p1=&a; 
int *const p2;       //不允許,必須對其初始化
p2=&b;                 //不允許,p2是常量不允許作為左值
*p1=2;                 //允許修改指標*p1的值

如果指標作為函式引數,當我們不想被呼叫函式隨意修改引數指標而只是想修改引數指標指向的內容時,我們常把指標常量作為引數。例如:

有兩個整形變數a,b,我們寫個函式用於交換a,b的值,利用指標作為形參,函式修改引數指標的值是我們不希望的,這時可將引數設為指標常量,如果函式對指標修改編譯是將報錯。


void Exchange(int *const a,int *const b)
{
    int temp;
    temp=*a;
    *a=*b;
    *b=temp
}
事實上,如果函式不修改引數本身的值,我們一般對引數加上const限定,這也是提高程式碼質量的一個小技巧,在類的方法中,如果方法不修改類屬性的值,我們也常將方法加上const。