c++ 为什么输出是这样

 我来答
闻书雁
2016-09-25 · TA获得超过154个赞
知道答主
回答量:149
采纳率:100%
帮助的人:61.2万
展开全部

第一,你先看明白下面这段话的含义:

        如果有表达式 a = i++  它等价于 a = i ; i = i + 1;

        如果有表达式 a = ++i  它等价于   i = i + 1; a = i;

       1 首先两者的区别是:前者是先赋值,然后再自增;后者是先自增,后赋值

看好没。举例说明:

int i = 2;

则上面的式子为:

a = 2++        =>>            a = 2; i = 2 +1;            =>>             a = 2;    i = 3;

a = ++2        =>>            i = 2+1;a = i;              =>>              a = 3;    i = 3;


明白这点了把。虽然最后i都等于3,但是a却结果不一样;这就是i++和++i的区别。

第二,明白上面这点了,继续:

c和c++编译运行的时候,顺序是不一样的。

编译的时候,是从最右侧开始,运行的时候是从最左侧开始的。

记住并且明白以上两点。开始看你的代码。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(void)
{
int i = 3;
printf("%d,%d,%d,%d,%d\n",i,i++,++i,i++,i);
system("pause");
return 0;
}

依照编译规则,先右后左(全都倒数):

最右侧i = 3.

倒数第二i = 3(先赋值在++);

倒数第三i = 5(在这句话执行前,i已经在上一句的时候变成4了,所以这句先++,在赋值为5);

倒数第四i = 5(先赋值在++);

倒数第五(正数第一)i = 6(上句编译完后,i = 6,这句直接赋值);


再运行,从左往右(全都正数):

最左侧:i = 6;

第二:i = 5,因为编译到这里的时候,也就是上面的倒数第四那里,i = 5.

第三:i = 6,因为编译到这里的时候,也就是上面的倒数第三那里,i = 5,但是这句的先++,在赋值。

第四:i = 3,因为编译到这里的时候,也就是上面的倒数第二那里,i = 3.

第五:i = 6;

纯手打,望采纳!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式