| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 303 人关注过本帖
标题:自加运算符问题
只看楼主 加入收藏
天蓝云扬
Rank: 1
来 自:四川
等 级:新手上路
帖 子:2
专家分:0
注 册:2014-4-19
收藏
 问题点数:0 回复次数:0 
自加运算符问题
今早上遇到一个问题,原始代码是:
程序代码:
#include <stdio.h>
main()
{
int a=0,b=3;
a=(b++)+(b++)+(b++);
printf("a=%d\n",a);
printf("b=%d\n",b);
a=0,b=3;        //变量a重新归零,b重新归3
a=(++b)+(++b)+(++b);
printf("a=%d\n",a);
printf("b=%d\n",b);
}

这个代码根据分析结果应该是:
a=9
b=6
a=15
b=6
但是我用手机编译器(C4droid 用的linux下的G++编译器)运行结果为:
a=9
b=6
a=16
b=6
第二个a的值和想象的不一样,我认为可能是编译器的实现不一样,于是又用vs2013试了一下,结果:
a=9
b=6
a=18
b=6
这结果第二个a的值相差的更大

为了分析结果,我改了下代码:
程序代码:
#include <stdio.h>
main()
{
    int a = 0, b = 3;
    a = (b++) + (b++) + (b++);
    printf("a1=%d\t", a);
    printf("b1=%d\n", b);

    a = 0, b = 3;        //变量a重新归零,b重新归3
    a = (++b) + (++b) +(++b);
    printf("a2=%d\t", a);
    printf("b2=%d\n", b);

    a = 0, b = 3;        //变量a重新归零,b重新归3
    a = (++b) + (++b);// +(++b);
    printf("a3=%d\t", a);
    printf("b3=%d\n", b);

    a = 0, b = 3;        //变量a重新归零,b重新归3
    a = (++b);// +(++b) + (++b);
    printf("a4=%d\t", a);
    printf("b4=%d\n", b);

    a = 0, b = 3;        //变量a重新归零,b重新归3
    a += (++b);
    a += (++b);
    a += (++b);
    printf("a5=%d\t", a);
    printf("b5=%d\n", b);

    a = 0, b = 3;        //变量a重新归零,b重新归3
    a = (printf("b6_1=%d\t", ++b), b) + (printf("b6_2=%d\t", ++b), b) + (printf("b6_3=%d\t", ++b), b);
    printf("a6=%d\t", a);
    printf("b6=%d\n", b);
}

电脑运行结果:
a1=9    b1=6
a2=18   b2=6
a3=10   b3=5
a4=4    b4=4
a5=15   b5=6
b6_1=4  b6_2=5  b6_3=6  a6=18   b6=6

我就不懂了,4+5+6怎么就等于18了,求指点
搜索更多相关主题的帖子: color 
2014-04-19 16:35
快速回复:自加运算符问题
数据加载中...
 
   



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

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