238、請讀程序: int x=10; int y=x++; printf("%d,%d",(x++,y),y++); 則上面程序的輸出結果是____?A:11,10 B:11,11 C:10,10 D:10,1
2 回答
已采納
onemoo
TA貢獻883條經驗 獲得超454個贊
這又是道爛題!? 此題的正確答案是:輸出結果未定義。
我還是從頭說吧:
一開始 x 的初值為 10, y 的初值為 10(還記得吧,x++ 的值是 x 自增前的值)
然后就是函數調用,其中參數有:
(x++, y)? 這是逗號表達式,逗號表達式的值是右側那項的值
y++? ?別忘了這個表達式有自增的副作用,這個副作用何時發生可是與序列點有關呦
關鍵的、也就是這個題目錯誤的地方來啦: C 標準沒有規定調用函數時參數的求值順序(各個參數會以任意順序求值),而且每個參數求值后也不是序列點。
我想這樣一說你也就明白了:? 我根本就不知道 (x++, y) 和 y++ 這兩個參數哪個先算。再有,兩個參數求值之間不是序列點,那我也不知道 y 是何時自增了。 所以我根本就不知道 (x++, y) 中 y 的值該是多少。
順便說下,能夠確定的是:
最后 x 的值會是 12
第二個打印出來的值是 10
- 2 回答
- 1 關注
- 3294 瀏覽
添加回答
舉報
0/150
提交
取消
