const是C++中引入的一個新的關鍵字,它為C++編程帶來了很大的方便。指向const對象的指標和const指標是兩個名字很接近的概念,對於初學者來說非常容易搞混,這裡對它們進行區分。
1、指向const對象的指標
可以這樣理解指向const對象的指標:指向const對象的指標就是一個指標,不能通過它來修改它所指向的對象的值
聲明方法:const int *p;
const對象在初始化後是不允許對其值進行修改的,因此,我們不能用一個普通指標指向一個const對象,即下面的賦值會引起編譯錯誤:
const int i = 1;
int *p = &i;//出錯
否則的話,我們就可以利用普通指標來修改一個const對象的值,那麼const也就毫無意義了。
正確的方法是利用一個指向const對象的指標來擷取const對象的地址:
const int i = 1;
const int *p = &i;//正確
這樣,利用指向const對象的指標也是不能修改它所指向的const對象的值的。
需要注意的兩點:
指向const對象的指標本身不是const類型(這也是它與const指標的主要不同點),所以它可以指向另一個const對象;
指向const對象的指標可以被賦予一個非const對象的地址,但是此時試圖通過此指標來修改對象的值的操作是非法的
2、 const指標
可以這樣理解const指標:const指標就是一個指標,它本身就是const類型,所以將它初始化後不能再改變它的指向,即不能讓它指向一個新的對象
聲明方法:
int *const p;//指向非const對象的const指標
const int *constp;//指向const對象的const指標
由以上聲明方法可以看出,const指標可以指向const對象和非const對象,但是兩者的聲明方法是不同的。
使用const指標不可以修改其地址值,但是const指標指向非const對象,就可以利用它修改它所指向的對象的值。