关于C中的前++和后++
int a,b,c;a=3;
b=++a*++a;
c=a++*a++;
printf("%d %d %d",a,b,c);
问下大家结果是什么
----------------解决方案--------------------------------------------------------
这个我在自己的机器上运行了一遍
但结果和自己预期的不一样
希望大家可以把在你们机器上运行的结果告诉我 并说明你所使用的编译器
或者把原理给我解释下
[[it] 本帖最后由 ljfljf2006 于 2008-2-2 22:25 编辑 [/it]]
----------------解决方案--------------------------------------------------------
7 25 25 忘记写编译器了 补上 TURBO C 2.0
[[it] 本帖最后由 bbsstart 于 2008-2-2 23:01 编辑 [/it]]
----------------解决方案--------------------------------------------------------
我虽然不是高手,但这个问题我不用编译也弄明白结果了。
下面我帮您分析一下:
首先,a被赋值为3;
然后看b的赋值式子,都是++a,说明是先赋值,后运算,a头一次自加为4,后一次自加为5,由于运算符的优先级别问题,++、--等大于算数运算符,所以这时候等于是a*a=25;
再看看c的赋值表达式,很清楚,先运算后自加,所以c=25;
a经过自加,所以a=7;
解释得也不知道你明白没有?我解释得如果有错误的地方,请众位再指教。
----------------解决方案--------------------------------------------------------
[bo]以下是引用 [un]菜鸭[/un] 在 2008-2-2 22:35 的发言:[/bo]
a被赋值为3;a头一次自加为4,后一次自加为5
a被赋值为3;a头一次自加为4,后一次自加为5
为什么不是4*5=20呢?
这就是我的疑惑
----------------解决方案--------------------------------------------------------
回复 5# 的帖子
说过了嘛,是运算符优先级别问题,因为自加运算符高于*运算符,所以得先把它加完了,然后再参与乘法运算。 ----------------解决方案--------------------------------------------------------
回复 6# 的帖子
++a返回4,此时a=4,然后又++a,返回5,此时a=5; 这样的话就应该是b=4*5才对呀
这和 自加运算符高于*运算符 并不矛盾吧
[[it] 本帖最后由 ljfljf2006 于 2008-2-2 22:53 编辑 [/it]]
----------------解决方案--------------------------------------------------------
b=++a*++a;等于是A先自加两回,也就是等于5之后再参与运算,也就是a=5*5=25.
----------------解决方案--------------------------------------------------------
结果是7 25 25,照我的理解,a自加了4次,所以输出a为7,
b=++a*++a;中a先加了两次再相乘,a=5,所以5*5=25,
c=a++*a++;中a先相乘再自加两次,故5*5=25,自加后为7.
++a的意思是先自加后运算,a++则先运算后再自加。
其中,若b=++a*++a*++a;则b的结果是150,运算顺序为b=(++a*++a)*++a-->(5*5)*6.这里估计有一个结合性的问题了,
以上为个人理解,已经过初步验证
----------------解决方案--------------------------------------------------------
回复 9# 的帖子
在我的编译器下运行b=++a*++a*++a,结果是216 ----------------解决方案--------------------------------------------------------