const int* p;char* int p;const int* const p;的區別

先從const int i提及。使用const修飾的i咱們稱之爲符號常量。即,i不能在其餘地方被從新賦值了。注意:const int i與int const i是等價的,相同的,即const與int的位置無所謂。指針

一、const 若是在*的左邊,如const int* p = ...; const修飾的是整個*p(注意,是*p而不是p),因此*p是常量,是不能被賦值的。可是p所指向的內容是常量,指針自己是能夠改變的,注意這裏*p和p不同。code

表示p指向const類型的對象(其實也能夠指向非const對象,可是反過來非const指針不能指向const對象,緣由很簡單我定義一個類型就是不想他的值,假若讓一個非const指針能夠指向他那麼豈不是能夠經過這個指針修改它的值了?),根本目的在於爲了避免能夠經過p改變p所指對象的值例如: 對象

int i=0,j=0; 
const int *pi=&i;//這裏就是const指針指向非const對象 
i=2;//ok i是非const 值能夠改變 
*pi=3;//錯誤pi是指向const對象的指針不可經過它改變指向對象的值 
pi=&j;//ok,p是指向const類型的指針,而自己不是const指針,能夠改變指向 


二、const 若是在*的右邊,如int* const p = ...; 那麼p這個指針自己是常量,但內容是能夠改變的,也就是說此時p的值不能被賦值修改了,只能永遠指向初始化時候的內存地址。相反,可用*p修改i1的值了。內存

int i=0,j=0; 
 int * const p=&i;//ok定義時初始化 
 *p=1;//ok,p不是指向const對象的指針 
p=&j;//錯誤,由於p已經指向i了不能更改指向了 


三、若是寫成這樣:const int* const p = ...;
那麼p這個指針自己,以及它所指向的內容都是不能改變的。co

四、補充錯誤

補充
const int i1=40;
int *p;
p=&i1; //提示錯誤,沒法從const int轉爲int。
----------------------------------------
const int i1=40;
const int *p;
p=&i1; //兩個類型相同,能夠這樣賦值。
相關文章
相關標籤/搜索