有人可以向我解釋這個簡單代碼段的輸出嗎?爲什麼這個算術表達式產生這個結果?
int i=7;
int j=3*i-- + 2;
printf("%d %d",i,j)
當我編譯我得到6,23
。
它是如何到23?我認爲這將是3 * 7 = 21減少到20和增加2是22而不是23?
有人可以向我解釋這個簡單代碼段的輸出嗎?爲什麼這個算術表達式產生這個結果?
int i=7;
int j=3*i-- + 2;
printf("%d %d",i,j)
當我編譯我得到6,23
。
它是如何到23?我認爲這將是3 * 7 = 21減少到20和增加2是22而不是23?
int i = 7; /* i is 7 */
int j = (3 * (i--)) /* means 3 * 7 */ + 2; /* 3 * 7 + 2 = 23 */
/* i is now 6, because it was decreased by the postfix -- operator */
printf("%d %d", i /* 6 */, j /* 23 */);
i--
確實有遞減1 i
的(將其設定爲6)的副作用,但表達產生的i
的先前值。 --i
將遞減i
併產生新的結果。
--
綁定到i
,而不是3*i
。 (因爲3*i
不是--
要求的左值,所以在任何情況下都不能有(3*i)--
。)i--
的值是i
的原始值,它在遞減之前。用C元運算符的
列表:http://en.wikipedia.org/wiki/Unary_operation#C_family_of_languages
--
是一元運算符,並結合i
,所以它的i--
,不(3 * i)--
。
因爲它是後減的i
使用減量前的價值,所以你的公式就是:
3 * 7 + 2
和i
將是6