0
該程序的輸出即將達到4.00000。 我不知道會發生什麼情況下首先乘以2,然後增量發生或乘以2增加c?在增量之前增加或乘法之後會發生什麼第一次乘法?
int main()
{
int c=1;
c=c+2*c++;
printf("\n%f", c);
return 0;
}
該程序的輸出即將達到4.00000。 我不知道會發生什麼情況下首先乘以2,然後增量發生或乘以2增加c?在增量之前增加或乘法之後會發生什麼第一次乘法?
int main()
{
int c=1;
c=c+2*c++;
printf("\n%f", c);
return 0;
}
這會調用未定義的行爲,這意味着任何事情都可能發生在您的程序中。
見C99規範,特別是J.2未定義行爲:
的行爲是不明確下列情況:[...]
- 兩人之間的序列點,一個對象不止一次被修改,或者被修改並且先前的值被讀取,而不是確定要存儲的值(6.5)。
作爲拇指的「兩個序列點之間」的規則,兩個分號(;
),該結束語句裝置之間。摘錄中提到的「對象」是變量c
。
這樣一來,我們可以清楚地看到對象在兩個序列點之間被修改了兩次。在表達式c++
的評估期間修改過一次,在作業期間修改過一次。
首先會發生的事情(總是在這種情況下)是未定義的行爲。 – Haris
閱讀此:http://stackoverflow.com/questions/7506704/difference-between-sequence-points-and-operator-precedence-0-o ...關鍵位:「這並不重要,由於運營商的優先順序兩個操作符的評估順序是明確的,因爲它們的副作用的處理順序仍然沒有定義。「 – Woodstock
另外'%f'是浮點數,你打印的是一個int,所以使用'%d' – Caw