黑马程序员技术交流社区

标题: 关于++a和a++的问题 [打印本页]

作者: z82454642    时间: 2014-2-24 16:15
标题: 关于++a和a++的问题
本帖最后由 z82454642 于 2014-3-11 23:34 编辑

#include <stdio.h>
int main(int argc, const char * argv[])
{
    int b;
    int a = 5;
    b = (++a) + (a++);
   
    printf("b=%d, a=%d\n", b, a);
    return 0;
}

这段代码编译的时候会有一个警告
warning: multiple unsequenced modifications to 'a' [-Wunsequenced]
    b = (++a) + (a++);

这个是因为什么啊?
作者: chay0103    时间: 2014-2-25 20:26
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式值为5,a为6,之后算++a,此时应该是7,算出来结果是5+7=12
作者: 脸皮猴    时间: 2014-2-26 15:07
chay0103 发表于 2014-2-25 20:26
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式 ...

- -好纠结的说啊·····能分析下下面的程序为什么会是这个结果吗?
int a = 6;
b=(a++)+(++a);
printf("---b1=%d\n",b);
a = 6;
b=(a++)+(a++)+(++a);
printf("---b2=%d\n",b);输出结果····我什么会这样子··


第二个多了个 a++;居然才比第一个大了5?!!!?有点无法理解··

作者: z82454642    时间: 2014-2-26 22:36
chay0103 发表于 2014-2-25 20:26
其实这样写,不同的编译器处理是不同的,但是基本上应该是从表达式的右边一直往左结合计算,先算a++表达式 ...

b = (++a) + (a++); 这一行应该是从左到右计算,先是++a,a=6,然后再加6,结果b=12,运算结束了a才等于7吧
作者: z82454642    时间: 2014-2-26 22:46
本帖最后由 z82454642 于 2014-2-26 23:01 编辑
脸皮猴 发表于 2014-2-26 15:07
- -好纠结的说啊·····能分析下下面的程序为什么会是这个结果吗?
int a = 6;
b=(a++)+(++a);

我用你的代码试了下输出结果是
---b1=14
---b2=22
这道题就是一个优先级的问题
int a = 6;
b=(a++)+(++a); // 这行b=6+8
printf("---b1=%d\n",b);
a = 6;
b=(a++)+(a++)+(++a);//这行等于6+7+9
printf("---b2=%d\n",b)


作者: 平凡成就非凡    时间: 2014-2-27 00:37
++是左结合的,意思就是先完成++左边的元算
作者: 脸皮猴    时间: 2014-2-27 11:17
z82454642 发表于 2014-2-26 22:46
我用你的代码试了下输出结果是
---b1=14
---b2=22

那说明·不同的编译器可能得出的结果不同咯?我知道这个a++和++a的区别,但是像我列出的程序那样子的情况·这种··真是得看编译器了··




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2