1.指向const對象的指針
我們可以通過指針來修改其所指對象的值,但如果指針指向的是const對象,則不允許使用指針來改變其所指的const值。C++要求指向const對象的指針也是const類型。
const double *pd; //可以指向一個const double類型。
這裡的const限定的是pd所指的對象,而不是pd。這裡的pd是可以重新指向另外的一個地址的,但不允許使用pd來改變所指向對象的值。
把一個const對象的地址賦給非const對象的指針會導致編譯時錯誤,例如:
const int a=8;
int *p=&a; //error
const int *cp=&a; //ok
不能使用void*指針保存const對象的地址,可以使用const void*類型的指針保存const類型的地址。
允許把非const對象的地址賦值給指向const對象的指針:
int c=3;
cp=&c;
雖然c不是const類型,但是使用cp修改c的值會導致編譯錯誤。cp被定義為指向const對象的指針,那麼cp就不能改變其所指對象的值。
指向const對象的指針所指的對象不一定是const對象,所以不能保證所指的對象的值不可更改,應為畢竟其所指的對象可以是非const對象,可以使用其他方法更改其值。
可以把指向const對象當做“自以為指向const對象的指針”來理解。
在實際的應用中,指向const對象的指針常用作函數的形參,這樣可以保證在函數中不會應為形參改變實參所指的對象。
2.const指針
const指針是指該指針不可改變。
int num=4;
int *const p=#
可以把p理解為p是指向int類型的const指針。這就意味著不能使p指向其他對象,任何試圖給p賦值的操作導致編譯錯誤。const指針必須在編譯時初始化。
該指針是const並不代表就不能修改其所指對象的值。如果const指針指向非const對象,那麼就可以使用該指針修改所指對象的值,例如
int e=9;
int *const p=&e;
*p=6;
這樣,e的值被修改為6.
還有一種指向const對象的const指針,如下使用:
const int d=4;
const int *const p=&d;
這樣p的值不能修改,p指向對象的值也不能修改。
至於指針和typdef這樣的東西,為何要用呢?使用typedef就像是自己打自己一巴掌,把自己搞糊塗了,應該盡量避免使用typedef來定義指針,一家之言。。。。。