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

为什么... 为什么 展开
 我来答
nakum
2019-10-05
知道答主
回答量:8
采纳率:0%
帮助的人:8074
展开全部

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

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

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

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

burufeiba
推荐于2018-03-10 · TA获得超过1375个赞
知道小有建树答主
回答量:246
采纳率:100%
帮助的人:336万
展开全部
“(x++,y) 是逗号表达式,取第一个子表达式的值作为整个表达式的值,故整个表达式的值为11,然后x达到12” 非也。“逗号表达式”这种说法我不置可否,逗号运算符在此处起连接作用,相当于“·····然后····”的意思,最终生效的是最后那一串代码。第一输出的是y,第二输出的也是y。上述代码中,y只有初始化,没有赋值(除了y++以外,但此处对后输出的y没有影响),因此输出结果必然是相同的。

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

问问题的这位大概是没有自己动手操作的吧?如果是的话,这里就劝一句:尽信书不如无书,实际操作才是硬道理。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
幸令锋6Z
2019-10-03
知道答主
回答量:1
采纳率:0%
帮助的人:699
展开全部
我觉得是这样的,首先逗号运算符输出的是最后一个表达式的值,这是毋庸置疑的,逗号表达式中y的值是11,(上面的回答已经解释得很清楚了,我就不做解释了),至于之后的那个y++的值,问题出在printf函数上,程序只调用了一次该函数,在这次调用中,既把y放在逗号表达式中输出第一个结果,又让y执行y++操作输出第二个结果,所以两个输出都是针对一开始初始化的y进行的,若是调用两次printf函数,y++的结果才是11
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jxjjhhtf
2011-05-20
知道答主
回答量:40
采纳率:0%
帮助的人:13万
展开全部
int main()
{
int x=10,y;
y=x++;
printf("%d,%d",y,y++);
return 0;
}
输出:11,10 (因为你的Y的值是X而不是X加1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wuli学粑粑
2018-10-23
知道答主
回答量:2
采纳率:0%
帮助的人:1173
展开全部
这样想行不行,最后printf((%d%d),y,y++);
应该先把y++算出来(++二级运算符比分隔运算符高)
y++取10,y为11
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式