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 关注
- 3093 浏览
添加回答
举报
0/150
提交
取消