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啊 囧

追答

我也不清楚这是毛线情况

c语言(a++)+(a++)+(a++)和(++a)+(++a)+(++a)
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.

c语言的问题 a = (++a)+(++a)+(++a)+(++a) 计算原理
++a是左值,它的值是累加了1之后的a,是【变量】。而a++则仅仅是一个【值】,这个值等于变量a的原始值。因此对于(++a)+(++a)+(++a),过程如下:先取第一个++a和第二个++a,以进行二元运算“+”此时,经过两次++,a的值变为3 因此计算结果为a+a=6,此时不再是变量,而是值6 然后再取...

...b=(a++)+(a++)+(a++); c=(++a)+(++a)+(++a);TC、C-free和VC++6.0...
a++=1; \/\/报错这行代码编译会报错,因为a++不是一个左值,如前面说的,是一个常量,常量不是左值。就像 1=2;会报错一样。而 ++a=1; \/\/正常编译不会报错,这行代码使得a的值变成1。因为前缀自增是先自增,然后返回这个变量的引用。变量当然可以作为左值。按照你的代码,a最后是6,b最...

c语言中 (++a)+(++a)+(++a)是怎么算的
1、公式拆分,按照C语言计算方法和原则,这里的“=”意思是赋值,即将等号右边的数值赋值到左边去。所以公式可以依次拆分为 (1)a1=a*a (2)a2=a-a1 (3)a3=a2+a a是原来的赋值 2、以此计算原来的(1)(2)(3)式 结果为2a-a²...

c语言(a++)+(a++)怎么算
a++ ,a++;所以b=6;a=5;a++ ,即为a,在赋值语句结束后a才加1.++a 是直接加1.为了加深理解:给你几个例子 a=1;b= (++a)+ (++a);结果b=6 a = 1;.b=(++a) + (++a)+(++a);结果b=10 自己理解一下。具体原因是计算机的累加器只接受俩个家数,多以俩个加数的按从左到...

c语言中++ a和++ a++有什么区别
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...

b = (a++)+(++a)+(a++)+a;
由于a的初值是3,执行 b = (a++) + (++a) + (a++) + a 第一步,先执行第一个(a++):先取a的值3,再使a的值加1,此时,a的值为4 第二步,执行(++a) ,a的值为5 第三步,执行(a++),先取a的值5,然后再使a的值加1,a的值变为6 所以,b = (a++) + (++a) + (a...

C语言中,求a++ + ++a + a++ + ++a的值,a=10,请高手讲解一下具体运算过...
45 12 45 13 45 14 可以看到,初始的时候用11加了三次,最后一次加的是12 所以得到45。是编译器优化的结果。所以,最后a是14,和为45 上面的人们,别那么武断的下结论。因为错误就往往出现在武断中。楼主的表达式是下面这个意思:(a++)+(++a)+(a++)+(++a)。依旧是45 ...

c语言 a++ 与++a有什么区别
a++是先用a的值,用过之后再将a+1,而++a是用之前先将a+1,然后再用!比如说a初始值是6,那么你让b=a++,运行之后,b=6,a=7;而b=++a,运行之后,b=7,a=7

求运算顺序a++ + a++ + ++a + a++
楼上的不对! a++是先用后加,++a是先加再用。所以当a=1时,结果为:1+1+2+2=6 当a=2时,结果为:2+2+3+3=10

相似回答