指针和Const限定符
指針和Const限定符
1.指向const對象的指針
如果指針指向的是const對象,則不允許使用指針來改變其所指的const值。C++要求指向const對象的指針具有const特性。
const double *cptr; //cptr是一個指向double類型const對象的指針。? ? ? ?此處const限定了cptr指針所指向的對象類型,而非cptr本身。即cptr本身并不是const。在定義時,不需要對它進行初始化,若需要,可使cptr指向另一個const對象,但不允許使用cptr來改變所指向對象的值:? ? ? ?
*cptr = 30; //error1)把一個const對象的地址賦給非const對象的指針會導致編譯時錯誤:
const double Pi=3.14; double *ptr = Π //error const double *cptr = Π //ok2)不能使用void*指針保存const對象的地址,必須使用const void*類型的指針保存const對象的地址:
const int universe = 42; const void *cpv = &universe; //ok void *pv = &universe; //error3)允許把非const對象的地址賦值給指向const對象的指針:
double dval = 3; cptr = &dval;? 雖然dval不是const對象,但任何企圖通過指針cptr修改其值的行為均會導致編譯錯誤。指向const對象的指針一經定義,就不允許修改其所指對象(const對象和非const對象)的值。若指向const對象的指針所指的對象是非const對象,可以使用其他方法更改其值:
dval = 3.1415926; *cptr = 3.1415926; //error cptr = &dval; double *ptr = &dval; *ptr = 2.72; cout << *cptr; //輸出2.72故:不能保證指向const對象的指針所指對象的值一定不可以修改。
? 在實際的應用中,指向const對象的指針常用作函數的形參,以確保傳遞給函數的實際對象在函數中不因形參的改變而被修改。
2.const指針
const指針:是指該指針不可改變。
int errNumb = 0; int *const curErr = &errNumb;可從右向左將上述定義讀作“curErr是指向int型對象的const指針”。這意味著不能使curErr指向其他對象,任何試圖給curErr賦值的操作均會導致編譯錯誤。
curErr = curErr; //error與任何const量一樣,const指針必須在定義時初始化。
?
指針本身是const的事實并沒有說明是否能使用該指針修改它所指對象的值。指針所指對象的值能否修改完全取決于該對象的類型。即該指針是const并不代表就不能修改其所指對象的值。如果const指針指向非const對象,那么就可以使用該指針修改所指對象的值:
int e=9; int *const p=&e; *p=6;這樣,e的值被修改為6。
3.指向const對象的const指針
還有一種指向const對象的const指針:
const double pi = 3.1415926; const double *const pi_ptr = π上例中,即不能修改pi_ptr所指對象的值,也不允許修改指針的指向(即pi_ptr中存放的地址值)。可從右向左將上述定義讀作“pi_ptr首先是一個const指針,指向double類型的const對象”。
轉載于:https://www.cnblogs.com/whl2012/p/3614730.html
總結
以上是生活随笔為你收集整理的指针和Const限定符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]Java8-本地缓存
- 下一篇: $m$ 整除 $10^k$ 的一个充分条