輕狂書生 发表于 2018-1-25 20:26:51

新人求助!有关自加自减运算符的使用

    int x=5,y=5;
    int p,q,m,n;
    p=(x++)+(x++)+(x++);
    q=(++y)+(++y)+(++y);
    m=(++x)+(--y)+(x++)+(y--);
    n=(x--)+(y++)+(--x)+(++y);
    printf("%d %d %d %d %d %d\n",p,q,m,n,x,y);
   从q开始,为什么结果是22,是编译器版本的问题吗?按C语言的语法规则,p,q,m,n,x,y应该分别是多少?

orino 发表于 2018-1-25 21:03:35

这个问题原来解答过的一个帖子也问过了,你可以看一下,希望对你有帮助
http://bbs.fishc.com/thread-103186-1-1.html

orino 发表于 2018-1-25 21:12:49

本帖最后由 orino 于 2018-1-25 21:15 编辑

p=5+5+5
q=7+7+8
m=9+7+9+7
n=10+6+8+8

其实一个表达式不是直接就变成上面这样的1形式的,例如第2个(++y) + (++y) + (++y), 其实是从左边开始,先算最左边第一个的加法,但加法之前 括号里面有自增,所以先算自增,也就是 先把 第一个++i和第二个++i运算好,这时i变成了7,所以式子变成了 7+7+ (++i) ,也就是14+ (++i) ,14是中间结果保存。 同理要计算第2个加法,把第三个 ++ i 运算完,此时,i变成8, 式子变为14+8

輕狂書生 发表于 2018-1-26 16:49:38

orino 发表于 2018-1-25 21:12
p=5+5+5
q=7+7+8
m=9+7+9+7


好的,谢谢!
页: [1]
查看完整版本: 新人求助!有关自加自减运算符的使用