在C语言中(i++)+(i++)+(i++)和(++i)+(++i)+(++i) 有什么区别啊?急救

来源:百度知道 编辑:UC知道 时间:2024/05/16 08:21:15
我在某些C语言书中看到(i++)+(i++)+(i++)和(++i)+(++i)+(++i)的片段
i++)+(i++)+(i++)应理解为三个i相加,故P值为15。然后i再自增1三次相当于加3故i的最后值为8。而对于q 的值则不然,q=(++j)+(++j)+(++j)应理解为q先自增1,再参与运算,由于q自增1三次后值为8,三个8相加的和为24,j的最后值仍为8
这是对吗?急救啊!

ls的回答有误。这个的结果还是要看编译器的。
int i=5, j=5;
int p=(i++)+(i++)+(i++);
int q=(++j)+(++j)+(++j);
printf("%d %d", p, q);
上面这段代码,在vc,dev c++下结果是15 22,tc下是15 24
计算结果取决于各编译器进栈出栈的顺序。
这类代码移植性很差,需要尽量避免,也没有任何意义分析这样的运算顺序。

1 加入括号后,括号内的一律先运算
那么 (i++)+(i++)+(i++)和(++i)+(++i)+(++i) 就是一样的

2 q=(++j)+(++j)+(++j)
根据括号优先级最高,所以它计算的q的结果和 q=(j+1)+(j+1)+(j+1) 的结果一样是24

楼上的解释很好,不过呢……实际用起来没什么区别,都是随机结果,取决于编译器,因为楼上的解释只在++(或者--)连续出现小于3次的时候适用,当++连续出现3次以上,就取决于编译器了。

楼上的正解,楼主看的书是《沟通——从C语言开始》吗?我也在学这本书

说得都不错,但我建议写程序时没必要这么写吧,把它分开写不就没事了

要看编译器,赞LS的精神