​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++); 则上面程序的输出结果是____ 
A:11,10 B:11,11 C:10,10 D:10,1

包小龙虾
浏览 2947回答 2
2回答

onemoo

这又是道烂题!  此题的正确答案是:输出结果未定义。我还是从头说吧:一开始 x 的初值为 10, y 的初值为 10(还记得吧,x++ 的值是 x 自增前的值)然后就是函数调用,其中参数有:(x++, y)  这是逗号表达式,逗号表达式的值是右侧那项的值y++   别忘了这个表达式有自增的副作用,这个副作用何时发生可是与序列点有关呦关键的、也就是这个题目错误的地方来啦: C 标准没有规定调用函数时参数的求值顺序(各个参数会以任意顺序求值),而且每个参数求值后也不是序列点。我想这样一说你也就明白了:  我根本就不知道 (x++, y) 和 y++ 这两个参数哪个先算。再有,两个参数求值之间不是序列点,那我也不知道 y 是何时自增了。 所以我根本就不知道 (x++, y) 中 y 的值该是多少。顺便说下,能够确定的是:最后 x 的值会是 12第二个打印出来的值是 10

慕九州5552665

11,10这就是输出内容。
打开App,查看更多内容
随时随地看视频慕课网APP