有點複雜啊,一系列const組合起來。看的人頭都大了!但總的來說,想要存放常量物件的位址,只能使用指向常量的指標
const
double pi = 3.14; // pi是個常量,它的值不能改變
double *ptr = &pi //錯誤:ptr是乙個普通指標
const
double *cptr = π //正確:cptr可以指向乙個雙精度常量
*cptr = 42; //錯誤:不能給*cptr賦值
這裡要區別一下下面的,這裡的cptr可以改變指向,但是不能改變其指向的值。因為值被前面的const限定了。
這個不一樣,從標題可見是指標在前const在後,但是與上面的有什麼區別呢?
指標是物件而引用不是,因此就像其他物件型別一樣,允許把指標本身定為常量。常量指標必須初始化,而且一旦初始化完成,則它的值(也就是存放在指標中的那個位址)就不能在改變了。把*放在const關鍵字之前用於說明指標是乙個常量,這樣的書寫形式隱含著一層意味,即不變的是指標本身的值而非指向的那個值:
int errnumber = 0;
int *const cureerr = &errnumb; //curerr將一直指向errnumb(那麼可以通過該指標修改這個值嗎?)
//答案是可以,const只限定了指標指向的位置,沒有限定所指向的值
const
double pi = 3.14;
const
double *const pip = π //為什麼這裡前面加了const呢?因為該指標指向的是乙個const變數(const double)
就像之前說的,從右向左閱讀,此例中,離curerr最近的符號是const,意味著curerr本身是乙個常量物件。
總結一下
int pi = 1;
int p2 = 2;
const
int ppi = 3;
比如const的右邊是int,則不能改變int值;cosnt的右邊是p,且p是乙個指標,那麼不能改變p的指向。 對於指標應用const的理解
在c和c 語言中,在定義乙個變數時使用const,指示其值不能再被改變。在函式宣告中使用const定義傳入的指標引數,在函式中便不能更改其值,但是對於實參,並不要求其一定是const引數。也就是說,使用const使得函式能夠處理const和非const實參 否則將只能接受非const實參,因此建議將...
const 指標與指向const的指標
當使用帶有const的指標時其實有兩種意思。一種指的是你不能修改指標本身的內容,另一種指的是你不能修改指標指向的內容。聽起來有點混淆一會放個例子上來就明白了。先說指向const的指標,它的意思是指標指向的內容是不能被修改的。它有兩種寫法。const int p 推薦 int const p 第一種可...
const 指標與指向const的指標
當使用帶有const的指標時其實有兩種意思。一種指的是你不能修改指標本身的內容,另一種指的是你不能修改指標指向的內容。聽起來有點混淆一會放個例子上來就明白了。先說指向const的指標,它的意思是指標指向的內容是不能被修改的。它有兩種寫法。const int p 推薦 int const p 第一種可...