可以從以下簡單概念區別
const 物件的指標:指標所指的物件不能改變。
const 指標:指標本身不能改變。
指向const物件的指標
深層次理解
:c++中定義的const物件,如果想要用指標指向它,該指標就必須有const特性即需要用const物件指標。但是也可以用const物件指標去指向非const物件,而此時就不能通過此const物件指標修改此非const物件的值。看乙個簡單的例子:
const double pi1=3.14;
double pi2=3.1415;
定義乙個const物件指標:
const double *pt; //一般用const修飾的變數都是從右向左讀(如:pt 是乙個指向 double 型別的const 物件的指標)
此時 pt=&pi1;
或者 pt=&pi2;
都是正確的。(即,const物件指標可以指向不同的物件的位址不管是const的還是非const的)
而 對 pt=&pi1; 進行解賦值操作 *pt=3.1415926;
或者對 pt=&pi2; 進行解賦值操作 *pt=3.1415926;都是錯誤的。
(此時 const物件指標是不能夠改變物件的值,不管是const物件的值,還是非const物件的值.)
const 指標
:因為const指標是const變數,所以根據c++特性。const指標定義時必須初始化。故其定義與const物件指標不一樣。 如:
int num=0;
int *const p=#
必須有初始化的位址,所以其與const物件指標定義不一樣。const物件指標可以定義成 const int * p;可以不用初始化。
const 指標所指物件的值能否修改完全取決於物件的型別(若是非const物件型別就可以改變其值,若是const物件型別就無法改變其值)例如上面的 例子就可以通過
*p=1;改變num的值,此時num=1;
若 const int num =0;int *const p=# *p=1;就會出現編譯錯誤。
最後還有一種指標叫 指向const物件的const指標(因為是const變數所以定義是必須初始化)
const double pi=3.1415926;
const double *const pt=π//pt首先是乙個 const 指標,指向 double 型別的 const 物件
const指標和指向const物件的指標
1.有關const指標和指向const物件指標的一道題 首先要說明的是怎麼來判斷const指標還是指向const的指標 如果const後面跟的是型別,那麼const是用來修飾物件的,所以它是指向const物件的指標 但是如果const後面跟的是指標本身,那麼const是用來修飾指標的,所以它是con...
const指標和指向const物件的指標
在c 中,帶const修飾符的指標很容易混淆,做個總結 由於const物件的值不可以修改,所以不允許通過指標來改變其指向的const值,例如如下定義 const double cptr 這裡cptr是乙個指向double型別const物件的指標,const限定了cptr指標所指向的物件型別,而非cp...
const指標和指向const物件的指標
目錄 1.常量表示式 2.指標和引用的比較 3.指標和const限定符 4.陣列 const int n 100 int a n 1 上面的n 1是常量表示式,編譯時即可計算出結果。引用總是指向某個物件,定義引用時必須初始化,從一而終。給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另外乙...