指向const物件的指標 和 const指標的區別

2021-07-23 04:51:07 字數 1214 閱讀 3560

可以從以下簡單概念區別

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是常量表示式,編譯時即可計算出結果。引用總是指向某個物件,定義引用時必須初始化,從一而終。給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另外乙...