有如下:#include<stdio.h>
main()
{
int j=3;
printf("%d\n%d",++j,j++);
printf("\n%d\n%d",j++,++j);
}
为什么会输出5 3
6 7
呢,这个是这样分的,按照++和--的,不是应该输出 吗 4 4
4 5
2 回答
已采納

onemoo
TA貢獻883條經驗 獲得超454個贊
printf("%d\n%d",++j,j++);? 這樣的代碼的行為是“未定義的”
自增/減運算符構成的表達式,對操作數的自增/減算是表達式的“副作用”,這副作用并不保證和表達式求值同時發生。
以你這個函數調用是參數求值為例。函數的兩個參數都是自增表達式。那么 ,是++j 先算還是 j++ 先算呢? 答案是:不確定!? 而且關鍵是這兩個自增表達式還是對同一個變量自增的,那么 ++j 中的 j 會在 j++ 之前自增嗎? 還是別的情況?? 答案也是:不確定!? 所以這句 printf 打印出什么都有可能。
像自增這樣有副作用的表達式,如果你不確定它的副作用的發生順序,那最好一句中只用一個這樣的表達式。
比如像 @xungeer29 說的那樣分開寫,就能得到確定的結果了。

xungeer29
TA貢獻46條經驗 獲得超20個贊
你輸出 printf("%d\n",++j); printf("%d\n",j++); printf("%d\n",j++); printf("%d\n",++j); 試試,4457
- 2 回答
- 0 關注
- 2120 瀏覽
添加回答
舉報
0/150
提交
取消