c语言(a++)+(a++)+(a++)和(++a)+(++a)+(++a)

第一种我上机试过答案是12,第二种是15,这是为什么呢?求解,详细点啊~
a的初值是3

a=3时,(a++)+(a++)+(a++)=9毫无疑问。
(++a)+(++a)+(++a)有点情况:有些编译器解释先算3个++a,再加起来,就为18;而有的编译器却先把前两个算出来为10赋给一个中间变量,再算最后一个++a为6,再把二者加起来等于16。追问

我用的是xcode 算到的就是12和15啊 这是为毛!!!

追答

如果操作无误的话,你那编译器的解释显然不符合C关于前++后++的基本规定。显然是一项一项解释的,前者3+(3+1)+(4+1)=12,后者(3+1)+(4+1)+(5+1)=15。C规定,表达式中的前++在变量参与运算前求出,后++在变量参与运算后求出。所以你的编译器的解释不符合这个元规定。不过这种边缘化语句C没有统一规定到底如何解释,所以你的编译器的开发者或许也有解释的理由。尽管你已采优了,但说两句无妨……

追问

大神求联系方式啊!!!

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-15
++a是在用变量a前将变量a增加1,
a++是在用变量a后将变量a加1,所以
(a++)+(a++)+(a++)比(++a)+(++a)+(++a)的结果少3。。。

可以这么翻译这段语句:
sum=0;
a=3
(++a)+(++a)+(++a)
翻译过来就是
a=a+1;
sum = sum+a;//a=4
a=a+1;
sum = sum+a;//a=5
a=a+1;
sum=sum+a;//a=6
结果就是4+5+6 =15

(a++)+(a++)+(a++)

翻译过来就是
sum=sum+a;//a=3
a=a+1;

sum=sum+a;//a=4
a=a+1;
sum=sum+a;//a=5
a=a+1;
结果就是3+4+5 =12
第2个回答  2013-10-15
a=3时,
因为a++是变量a先参与其他运算再加1,所以(a++)+(a++)+(a++)实际上是3+3+3=9,运算后a的值是6.
++a则是先求a=a+1,然后再做其他运算,所以(++a)+(++a)+(++a)实际上是5+5+6=16,运算后a的值是6.追问

为什么是5+5+6??

追答

自加连加运算,是从右向左,先算后两个++a然后相加,就是5+5=10,然后再做一个++a,就是再加6

本回答被提问者采纳
第3个回答  2013-10-15
a初值是多少追问

抱歉 忘了写 初值是3

追答

#include
main()
{
int a=3,b,c;
b=(a++)+(a++)+(a++);
printf("%d\n",b);
}我运行了一下是9

追问

我把你的copy了运行是12啊 囧

追答

我也不清楚这是毛线情况

相似回答