指向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...