2011-11-21 120 views
0

在閱讀關於指針教程,我面臨着像他們這種常量指針和整型常量指針有什麼區別?

const int *p; 

int const *p; 

int *const p; 

請告訴我的主要區別碼?

雖然我指定的任何整數值的地址,像

int b=100; 
b=&p; 

我收到錯誤。這有什麼意義?有人可以用例子來解釋嗎?

+0

嘗試任何這些:http://stackoverflow.com/search?q=const+before+after – titaniumdecoy

回答

3

大多數時候,只需從右向左讀取它。

int const *p; 

p是一個指向constint」。

int *const p; 

pconst指針到int」。

唯一的例外是當const是lefmost關鍵字:

const int *p; 

然後,它的一樣:

int const *p; 

如果指針const,那麼你就不能修改其地址,但您可以更改其指向的值。如果指向的值是const(在你的情況下是int),那麼你不能修改指針指向的內容(但你可以指向其他內容)。

到無關的事,這無法編譯:

int b=100; 
b=&p; 

因爲你分配指針veriable(一int **)的地址b。這是非法轉換。你可以用演員強制它,但我不認爲這就是你想要的。

+0

假設變量命名是一致的,'B =&P;',因爲我們正在分配指針的地址應該失敗(即指針)到一個整數,不是? –

+0

@undur的確。男人,我一定很累,沒有看到! –