懂C程序的帮解题!

来源:百度知道 编辑:UC知道 时间:2024/06/23 09:10:48
设a=12
a+=a-=a*=a的值是?
附上思路啊,要思路!谢谢
要思路

a+=a-=a*=a
分为三段 a有2个值
一,
a+=a
a=a+a=12+12=24
二,
a-=a
a=a-a=24-24=0
最后
a*=a
a=a*a=0*0=0

得出a=0

学完C有很多年了!貌似是这样!

补充!要是按1楼的说法,那你反过来算!

最后答案好像都是a=0

答案是0
因为是赋值运算,所以从右往左运算
先算a*=a,即a=a*a,a=12,则a=144;
再算a-=a;即a=a-a,由上式有a=144,从而算得a=0;
最后算a+=a,即a=a+a,由上式有a=0,算得a=0.

这种问题有两点需要说明:
1、实际运行结果与编译器有关
2、这个需要提到一个概念,即序列点,具体你可以搜索理解理解

具体到这个题目来讲,在VC6.0编译器下面就是从后面往前面算
1、执行a*=a → a=12*12=144
2、执行a-=a*=a → a=a-a=144-144 =0
3、执行a+=a-=a*=a →a= a+a = 0+0 =0

最后结果为0,以上执行过程经过汇编测试证明VC6.0编译器上就是这样的

TO vip_show:学C这么多年,这个问题你还没弄清楚哦?多学习点编译相关的知识吧

c程序是在优先级相同的时候,是从右往左开始读取的.

结果是:0

从后面算起!

自己编译下不就不就好了吗~?