可能重複:
Could anyone explain these undefined behaviors (i = i++ + ++i , i = i++, etc…)左值問題
#include<stdio.h>
int main()
{
char a[]="Hello";
char *p=a;
while(*p)
++*p++; //Statement 2
printf("%s",a);
int x=10;
++x++; //Statement 1
return 0;
}
當我編譯此代碼我在聲明1,這我可以理解得到的左值所需錯誤。即使我打算做同樣的事情,該聲明2如何不會產生錯誤?有人可以放光嗎?
p在序列點之間被修改兩次,所以這是未定義的行爲。 – Lundin
@Lundin不,它不是。 '++ * p ++'是'++(*(p ++))','p'只修改一次,沒有UB。 –
好吧,有一個問題:爲什麼你想寫這樣的代碼,沒有括號?使用正確的括號和行爲將是可預測的+可讀。 – anishsane