1.指向const對象的指針
const int *p;
這個p是一個指向int類型const對象的指針,const限定了指針p所指向的類型,而并非p本身。也就是說p本身并不是const。在定義時不需要對它進行初始化,還可以給p重新賦值,使其指向另一個const對象。但不能通過p修改所指向對象的值。
示例1:int a=0; p=&a; 可以。
示例2:*p=20; 不可以。
結論:這種指向const對象的指針只是限制不能修改p指向對象的數值,而不是限制p指向什么對象。
把一個const對象的地址賦給一個不是指向const對象的指針也是不行的。
示例3:const int b=10;
int *p2=&b; //error
const int *p3=&b; //ok
結論:因為變量b有const修飾,不能被修改。但指針p2是一個普通的指針,可以修改指向對象的值,兩種聲明矛盾,所以不合法。而指向const對象的指針不允許修改指針指向對象的數值,所以這種方式合法。
2.const指針
int c=20;
int *const p4=&c;
指針p4稱為const指針。它和指向const對象的指針恰好相反,它不能夠修改所指向對象,但卻能夠修改指向對象的數值。另外,這種指針在聲明時必須初始化。
3.指向const對象的const指針
const int d=30;
const int *const dp=&d;
指針dp既不能修改指向的對象,也不能修改只想對象的值。