2015-04-23 76 views
0
#include<stdio.h> 
void main() 
{ 
    int a=4; 
    const int *p=&a; 
    *p--;  
} 

這意味着我們不能通過p更改值,所以在遞減語句中它應該給出一個錯誤,但它不會給出錯誤。誰能解釋爲什麼?爲什麼下面的程序沒有給出錯誤?

+2

'* p - '遞減'p'而不是'p'的內容。 – Rohan

+1

研究運營商的優先級。 – mfro

+0

它確實提供運行時錯誤 –

回答

4

*p--遞減p不包含p的內容。

如果你這樣做(*p)--你會得到編譯錯誤

error: decrement of read-only location ‘*p’ 
+0

感謝您的回答 –

+0

感謝您的回答 –

2

你可能會得到其中的運營商發生的順序錯了。 Postfix遞減得到比解除引用更高的operator precedence。所以你得到了:

*(p--); 

它不會給出錯誤,因爲const指針指向的值不會被修改。這是未定義的行爲雖然和任何事情可能發生,因爲你解除引用無效指針。

+0

感謝您的回答 –

相關問題