C 學習之指標和const限定符

2021-06-17 23:34:22 字數 1909 閱讀 1163

今天看了《c++ primer》4.2.5節「指標和const限定符」。覺得理解起來像繞口令似的,好不容易捋順一遍,一做題,又亂了。做

點筆記,供參考。

1、指向const物件的指標

(1)我們可以用指標來修改其所指物件的值。

(2)如果,某指標指向const物件,則不允許用指標來改變其所指的const值。

(3)c++為保證這個特性,強制要求指向const物件的指標也必須具有const特性。

example:

const double *cptr;

(1)這裡,cptr是乙個指向double型別const物件的指標。

(2)const限定了cptr指標所指向的物件,而並非cptr本身。即cptr本身並不是const型別。在定義時不需要對它進行初

始化,允許給cptr重新賦值,使其指向另乙個const物件。

(3)不能通過cptr修改其所指物件的值。

注意1:把乙個const物件的位址賦給乙個普通的、非const物件的指標也會導致編譯時的錯誤。

example:

const double pi=3.14;

double *ptr=π  //error:ptr is a plain pointer

const double *cptr=π  //ok:cptr is a pointer to const

注意2:不能使用void*指標儲存const物件的位址,而必須使用 const void*型別的指標儲存const物件的位址。

example:

const int universe=42;

const void *cpv=&universe;  //ok:cpv is const

void *pv=&universe;     //error:universe is const

注意3:允許把非const物件的位址賦給指向const物件的指標

example:

double dval=3.14; //dval is a double ;its value can be changed

cptr=&dval;    //ok:but can not change dval through cptr

儘管dval不是const物件,但任何企圖通過指標cptr修改其值的行為都會導致編譯時錯誤。cptr一經定義,就不允許修改

其所指向物件的值。

2、const指標

const指標---本身的值不能修改。

int errnumb=0;

int *const curerr=&errnumb;  //curerr is a constant pointer

注:curerr是指向int型物件的const指標。與其他const量一樣,const指標的值不能修改,這就意味著不能使curerr指

向其他物件。

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

指標本身是const的事實--並沒有說明--是否能使用該指標修改它所指向物件的值。指標所指物件的值能否修改完全取決

於該物件的型別。

3、指向const物件的const指標

example:

const double pi=3.14;

const double *const pi_ptr=π

本例子中,既不能修改pi_ptr所指向物件的值,也不能修改該指標的指向(即pi_ptr中存放的位址值)。

pi_ptr首先是乙個const指標,指向double型別的const物件。

4、指標和typedef

typedef string *pstring;

cosnt pstring cstr;

問:cstr變數是什麼型別?

答:把cstr定義為指向string型別物件的const指標

這個定義等價於string *const cstr;

指標和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...