标题:自增问题
只看楼主
ansf
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2018-7-26
结帖率:100%
已结贴  问题点数:20 回复次数:2 
自增问题
#include <stdio.h>

void main()
{
          int a=3,b;
          b=(++a)+(++a)+(++a);
          printf  ("%d,%d\n",a,b);
}

问:为什么输出的结果是6,16
    不应该是6,18吗?
搜索更多相关主题的帖子: 自增 int printf 输出 结果 
2018-07-26 09:28
no1xijin
Rank: 9Rank: 9Rank: 9
来 自:江西
等 级:贵宾
威 望:20
帖 子:211
专家分:1207
注 册:2015-7-8
得分:20 
第一步:运算(++a),得到a等于4
第二步:运算(++a),得到a等于5
第三步:运算(++a)+(++a),具体值为5+5,得到一个值为10
第四步:运算(++a),得到a等于6
第五步:将第三步的值加上第四步的值,得到b等于16

下面给出了类推程序,以便加深你的理解。
程序代码:
#include <stdio.h>

void main()
{
          int a=3,b,c,d,e;
          b=(++a)+(++a);
          a=3;
          c=(++a)+(++a)+(++a);
          a=3;
          d=(++a)+(++a)+(++a)+(++a);
          a=3;
          e=(++a)+(++a)+(++a)+(++a)+(++a);
          printf  ("a=%d,b=%d,c=%d,d=%d,e=%d\n",a,b,c,d,e);
}

126邮箱联系方式:no1xijin@126. com
2018-07-26 09:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
未定义行为
也就是说C标准对此没人任何规定,编译器怎么做都可以。
因此它没有任何必须出现的结果,自然也不会有任何解释。
2018-07-26 10:07



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-488822-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.071356 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved