亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

?238、請讀程序: int x=10; int y=x++; printf("%d,%d",(x++,y),y++); 則上面程序的輸出結果是____

?238、請讀程序: int x=10; int y=x++; printf("%d,%d",(x++,y),y++); 則上面程序的輸出結果是____

C
包小龍蝦 2018-09-10 20:30:54
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

查看完整回答
反對 回復 2018-09-12
?
慕九州5552665

TA貢獻3條經驗 獲得超2個贊

11,10

這就是輸出內容。

查看完整回答
反對 回復 2018-09-12
  • 2 回答
  • 1 關注
  • 3294 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號