指標和const限定

2021-07-27 14:36:48 字數 2509 閱讀 7731



指向const物件的const指標

可以定義指向const物件的const指標,形式為:

const 指向型別 * const 指標變數名; 例如

const double pi = 3.14159;

const double * const p = π //p為指向const物件的const指標。

const指標 

乙個指標變數可以是唯讀的,稱為const指標,定義形式為

指向型別 * const 指標變數名; 例如

int a =10,b =20;

int * const p =&a;  //p是const指標     可以從右向左把上述定義語句理解為「p是指向int型物件的const指標」,與其他const變數一樣,const指標的值不能改變,這就意味著不能使p再被賦值指向其他物件。任何試圖給const指標賦值的操作,即使是給p賦回同樣的值都會導致編譯錯誤:

p=&b; //錯誤,p是唯讀的

p=p;  //錯誤,p是唯讀的

p++;  //錯誤,p是唯讀的

與任何const量一樣,const指標必須在定義時初始化。

注:指標本身是const的並沒有說明是否能使用該指標修改它所指向物件的值。指標所指物件的值能否修改完全取決於該物件的型別,例如,p指向乙個非const的int型物件a,則可通過p間接引用修改該物件的值:

*p=100   //正確,a被修改。

指向const物件的指標

乙個指標變數可以指向唯讀物件,稱為指向const物件的指標,定義形式為:

const 指向型別 * 指標變數名;

即在指標變數定義之前加const限定符,其含義是指標指向的物件是唯讀的,換言之,不允許通過指標來改變所指向的const物件的值。

例如:const int * p ;

這裡 p 是乙個指向const的 int 型別物件的指標,const限定了p指標所指向的物件型別,並非p本身,也就是說,p本身並不是唯讀的,在定義時  不需要對p進行初始化,可以給p重新賦值,使其指向另乙個const物件,但是不能通過p修改其所指向物件的值。

例如:const int a = 10,b = 20 ;

const int * p ;

p = & a;  //正確,p不是唯讀的

p = & b; //正確,p不是唯讀的,可以改變p的值

*p = 42; //錯誤,*p是唯讀的   即p所指向的物件是唯讀的

《1》把乙個const物件的位址賦給乙個非const物件的指標變數是錯誤的,例如

const double pi = 3.14159;

double *p =  π         //錯誤  p是非const的指標變數

const double *p1 =&pi      //正確,p1是const指標變數

const int x = 42;

const void* p = &x;        //正確,p是const指標變數

void* p1=&x ;              //錯誤,x是const的,

const double p =  3.14159;

const double* p1 = &p;    //正確,p1是const指標變數

double f = 3.14;

p1 = &f;                 //正確,允許非const的物件的位址賦給const指標;

f = 1.614;               //正確,可以修改f的值

*p1 = 10.1;              //錯誤,不允許通過引用p1來改變f的值

注:儘管f不是const物件,但是任何試圖通過指標p1修改f的值的行為都會導致編譯錯誤,p1一經定義,就不允許修改其所指向的值,如果該指標恰好指向乙個非const物件時,同樣必須遵守這個原則。

《4》不能使用指向const物件的指標修改指向物件,然而如果該指標指向的是乙個非const物件,可用其他方法修改其所指向的物件。例如:

double f, *p = &f; 

const double* p1=&f ;

f =  3.14 ;             //正確,f不是const  允許修改;

*p1 = 3.14;             //錯誤,p1是const指標,不允許修改*p1;

*p = 2.72;              //正確,ptr不是const指標,允許修改*p

程式中,指向const的指標實際上指向乙個非const物件,儘管它所指的物件並非const,但是仍然不能使用p1去修改該物件的值。本質上來講,由於沒有辦法分辨 p1 所指向的物件是否為const,系統會把它所指的物件都視為const。

如果指向const的指標所指的物件並非const,則可以直接給改物件賦值或者間接的利用非const指標修修改其值。畢竟這個物件不是const的:重要的是記住,不能保證指向const指標所指物件的值一定不被其他方式修改。

在實際程式設計中,指向const的指標常用作函式的形參,將形參定義為指向const的指標,以此確保傳遞給函式的實參物件在函式中不被修改。    

指標和const限定符

const int p 1,表示p指向乙個整型變數,並且該變數為const的。2,可以更改p的值,不可以更改它所指向物件的值。3,它可以指向非const型別的int變數 int const p 1,表示p指向乙個整型變數,該變數為非const的 2,不可以更改p的值,一旦初始化不可更改,單可以更改它...

指標和const限定符

1 指向const物件的指標 const double pi 3.14 double ptr error ptr is a plain pointer const double cptr ok cptr is a pointer to const 不能用void 指標儲存const物件的位址,而必須...

指標和const限定符

一 指向const物件的指標 1 定義格式 const 型別 指標名 const放在型別名的前面,它是用來限定物件的型別的,即物件的型別是 const 型別 2 由於物件是const型別,在定義的時候進行了初始化之後就不能被修改,所以通過指向const物件的指標修改物件的值是錯誤的。3 把乙個con...