为了账号安全,请及时绑定邮箱和手机立即绑定

​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 关注
  • 2937 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信