C语言问题: printf("%d %d %d %d\n",i,j,m=++i,n=j++);

#include<stdio.h>intmain(void){inti=8,j=10,m=0,n=0;printf("%d%d%d%d\n",i,j,m=++i,n=j+... #include<stdio.h>
int main(void)
{
int i=8,j=10,m=0,n=0;
printf("%d %d %d %d\n",i,j,m=++i,n=j++);
return 0;
}

运行结果是9 10 9 10
为什么是这个答案,不理解。(因为我自己觉得答案是8 10 9 10)
展开
 我来答
潭秋梵暖24
推荐于2018-03-11 · TA获得超过140个赞
知道答主
回答量:83
采纳率:100%
帮助的人:37.9万
展开全部
printf函数在打印的时候先会计算出后面所有的表达式后再输出到标准输出上,后面的逗号表达式为i,j,m=++i,n=j++;i初始化为8,j初始化为10,m=++i(i先加变为9赋值给m,所以i为9,m为9),n=j++(j先赋值后再加,所以n是10,j也是10)。也许你会问j加了为什么不是11,这取决你的编译器(i++,和++i)在什么时候,我的编译器上j就会变成11.你的就是先打印了再j加了,你可以再后面加一句打印一下j的值。也许就是11.好了,就这样了。
百度网友6531ab7
2013-08-06 · TA获得超过344个赞
知道答主
回答量:119
采纳率:0%
帮助的人:48.5万
展开全部
printf 函数的参数是从右向左运算,然后,再从左向右输出的。
其顺序是,n = j++ 为n为10,m=++i,m为9,此时i,j的值变成,9,10(j的还没变,printf返回后,再变)。这时,再从左向右输出表达式。因此结果就为9,10,9,10
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友9c38907
2013-08-06 · TA获得超过421个赞
知道小有建树答主
回答量:350
采纳率:0%
帮助的人:359万
展开全部
呵呵,楼主的运算顺序反了,应遵循从右向左的顺序,则依次计算为
n=j++ 自加在后,可以先忽略了 n=10

m=++i 则i的值为9 m=9
所以printf为9 10 9 10
希望对你有帮助。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
czhko
2013-08-06 · TA获得超过836个赞
知道小有建树答主
回答量:616
采纳率:0%
帮助的人:332万
展开全部
亲,答案是9 11 9 10
原因是
i++是先计算后再加1 i=5这个是计算,i++就是i=5+1
++i是先自加1后再计算 ++i就是i+1=i i+5
所以
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
一路清晨503
2013-08-06 · TA获得超过228个赞
知道小有建树答主
回答量:413
采纳率:100%
帮助的人:252万
展开全部
楼主忽悠了好些人,一看他们就是猜得
正确答案是 9 11 9 10
和他们说的一样啊,从右向左计算,右边优先级最高,
各位下次回答的时候拜托先验证一下,别误导了别人
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式