程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程解疑 >> c++-為什麼網上的“常量指針”和《C++ Primer》中的“常量指針”是相反的?應該以哪個為准?

c++-為什麼網上的“常量指針”和《C++ Primer》中的“常量指針”是相反的?應該以哪個為准?

編輯:編程解疑
為什麼網上的“常量指針”和《C++ Primer》中的“常量指針”是相反的?應該以哪個為准?

《C++ Primer》第五版,中文版。56 頁。
《C++ Primer》裡好像沒有“指針常量”,只有“指向常量的指針”。

最佳回答:


一) 常量指針。

常量是形容詞,指針是名詞,以指針為中心的一個偏正結構短語。這樣看,常量指針本質是指針,常量修飾它,表示這個指針乃是一個指向常量的指針(變量)。

指針指向的對象是常量,那麼這個對象不能被更改。

在C/C++中,常量指針是這樣聲明的:

1)const int *p;

2)int const *p;

常量指針的使用要注意,指針指向的對象不能通過這個指針來修改,可是仍然可以通過原來的聲明修改,也就是說常量指針可以被賦值為變量的地址,之所以叫做常量指針,是限制了通過這個指針修改變量的值。例如:

int a = 5;

const int b = 8;

const int *c = &a; // 這是合法的,非法的是對c的使用

*c = 6; // 非法,但可以這樣修改c指向的對象的值:a = 6;

二) 指針常量

指針是形容詞,常量是名詞。這回是以常量為中心的一個偏正結構短語。那麼,指針常量的本質是一個常量,而用指針修飾它,那麼說明這個常量的值應該是一個指針。

指針常量的值是指針,這個值因為是常量,所以不能被賦值。

在C/C++中,指針常量這樣聲明:

int a;

int *const b = &a; //const放在指針聲明操作符的右側

只要const位於指針聲明操作符右側,就表明聲明的對象是一個常量,且它的內容是一個指針,也就是一個地址。上面的聲明可以這麼讀,聲明了一個常量b,它的值是變量a的地址(變量a的地址,不就是指向變量a的指針嗎)。

因為指針常量是一個常量,在聲明的時候一定要給它賦初始值。一旦賦值,以後這個常量再也不能指向別的地址。

雖然指針常量的值不能變,可是它指向的對象是可變的,因為我們並沒有限制它指向的對象是常量。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved