238、請讀程序: int x=10; int y=x++; printf("%d,%d",(x++,y),y++); 則上面程序的輸出結(jié)果是____?A:11,10 B:11,11 C:10,10 D:10,1
2 回答
已采納

onemoo
TA貢獻(xiàn)883條經(jīng)驗(yàn) 獲得超454個贊
這又是道爛題!? 此題的正確答案是:輸出結(jié)果未定義。
我還是從頭說吧:
一開始 x 的初值為 10, y 的初值為 10(還記得吧,x++ 的值是 x 自增前的值)
然后就是函數(shù)調(diào)用,其中參數(shù)有:
(x++, y)? 這是逗號表達(dá)式,逗號表達(dá)式的值是右側(cè)那項(xiàng)的值
y++? ?別忘了這個表達(dá)式有自增的副作用,這個副作用何時發(fā)生可是與序列點(diǎn)有關(guān)呦
關(guān)鍵的、也就是這個題目錯誤的地方來啦: C 標(biāo)準(zhǔn)沒有規(guī)定調(diào)用函數(shù)時參數(shù)的求值順序(各個參數(shù)會以任意順序求值),而且每個參數(shù)求值后也不是序列點(diǎn)。
我想這樣一說你也就明白了:? 我根本就不知道 (x++, y) 和 y++ 這兩個參數(shù)哪個先算。再有,兩個參數(shù)求值之間不是序列點(diǎn),那我也不知道 y 是何時自增了。 所以我根本就不知道 (x++, y) 中 y 的值該是多少。
順便說下,能夠確定的是:
最后 x 的值會是 12
第二個打印出來的值是 10
- 2 回答
- 1 關(guān)注
- 3215 瀏覽
添加回答
舉報
0/150
提交
取消