「指向const對象的指針」和「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 int a=0;
      //這裏的p就是指向const的指針。須要用const_cast來強制類型轉換 
      int *p=const_cast<int *>(&a);  
這樣,利用指向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對象,就能夠利用它修改它所指向的對象的值。對象


其實要弄清二者的區別,只要明確兩點就夠了:
指針自己是const型仍是非const型
指針所指向的對象是const型仍是非const型
const型變量的值在初始化後是不容許改變的(這是根本),那麼const指針其指向是不能變的,const對象其值是不能變的,一切都清楚了
2.要弄清楚上面的兩個問題,有一個很簡單的辦法:
若是指針名前緊鄰的關鍵字爲const,那麼它就是一個const指針;若是聲明指針所指向的對象類型前有const關鍵字,那麼它就是一個指向cosnt對象的指針。
應用上面的判斷方法,const int *const p; 就表示指向const對象int的const指針編譯

     const char *p; 指向const的指針.
     char const *p; 指向const的指針.
     char * const p; const指針.
 
     const char*p p指向的內容是不可以修改的。可是p指針自己是能夠修改的
    char* const p p指針自己是不容許修改的,可是他指向的地址是能夠更改的。
    const int* const p p的內容不能夠修改(不能夠指向別的int),p指向的int值也不能夠修改
相關文章
相關標籤/搜索