#include<stdio.h>
void main()
{
int a=4;
const int *p=&a;
*p--;
}
這意味着我們不能通過p更改值,所以在遞減語句中它應該給出一個錯誤,但它不會給出錯誤。誰能解釋爲什麼?爲什麼下面的程序沒有給出錯誤?
#include<stdio.h>
void main()
{
int a=4;
const int *p=&a;
*p--;
}
這意味着我們不能通過p更改值,所以在遞減語句中它應該給出一個錯誤,但它不會給出錯誤。誰能解釋爲什麼?爲什麼下面的程序沒有給出錯誤?
*p--
遞減p
不包含p
的內容。
如果你這樣做(*p)--
你會得到編譯錯誤
error: decrement of read-only location ‘*p’
感謝您的回答 –
感謝您的回答 –
你可能會得到其中的運營商發生的順序錯了。 Postfix遞減得到比解除引用更高的operator precedence。所以你得到了:
*(p--);
它不會給出錯誤,因爲const指針指向的值不會被修改。這是未定義的行爲雖然和任何事情可能發生,因爲你解除引用無效指針。
感謝您的回答 –
'* p - '遞減'p'而不是'p'的內容。 – Rohan
研究運營商的優先級。 – mfro
它確實提供運行時錯誤 –