下述程序段的输出结果是 int x=10; int y=x++; printf(“%d,%d”,(x++,y),y++); 答案是 11,10

为什么

先放张图,规律很容易看出来吧

首先,逗号运算符是取右边

这里涉及到参数的求值顺序,即确定最右侧y++输出是5后,自增1,导致下一步中间y++输出是6,之后再自增1,最后y的输出自然就是7。

是不是眼熟,这不就是栈嘛,后进先出,这题不太会考察,出题人估计都没想到这一层,只是单纯想考逗号和自增运算。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-10
“(x++,y) 是逗号表达式,取第一个子表达式的值作为整个表达式的值,故整个表达式的值为11,然后x达到12” 非也。“逗号表达式”这种说法我不置可否,逗号运算符在此处起连接作用,相当于“·····然后····”的意思,最终生效的是最后那一串代码。第一输出的是y,第二输出的也是y。上述代码中,y只有初始化,没有赋值(除了y++以外,但此处对后输出的y没有影响),因此输出结果必然是相同的。

“y++ 整个表达式的值是10,然后y达到12” 这也太说不过去了吧,y最终达到12了?

问问题的这位大概是没有自己动手操作的吧?如果是的话,这里就劝一句:尽信书不如无书,实际操作才是硬道理。本回答被网友采纳
第2个回答  2019-10-03
我觉得是这样的,首先逗号运算符输出的是最后一个表达式的值,这是毋庸置疑的,逗号表达式中y的值是11,(上面的回答已经解释得很清楚了,我就不做解释了),至于之后的那个y++的值,问题出在printf函数上,程序只调用了一次该函数,在这次调用中,既把y放在逗号表达式中输出第一个结果,又让y执行y++操作输出第二个结果,所以两个输出都是针对一开始初始化的y进行的,若是调用两次printf函数,y++的结果才是11
第3个回答  2011-05-20
int main()
{
int x=10,y;
y=x++;
printf("%d,%d",y,y++);
return 0;
}
输出:11,10 (因为你的Y的值是X而不是X加1)
第4个回答  2018-10-23
这样想行不行,最后printf((%d%d),y,y++);
应该先把y++算出来(++二级运算符比分隔运算符高)
y++取10,y为11