c语言问题 我(菜鸟)超迷惑的问题。 高手进

来源:百度知道 编辑:UC知道 时间:2024/06/20 02:51:28
有程序
main()
{
int a,b;
a=10;
b=(--a)+(--a)+(--a);
printf("a=%d,b=%d\n",a,b);
}
结果 为 a=7,b=23
哪位哥哥姐姐 给我讲一下过程?

然后就是 --a是不是就等同于 a=a-1 ?

还有, 如果 改为 b=(--a)+(--a) 的话, a=8,b=16

如果 改为 b=(--a)+(--a)+(--a)+(--a)的话, a=6,b=29

天那 。。。。

到底 怎么附值的啊。。

谢谢

因为自增减运算符比+号运算符优先.

所以 (- -a)这个先向右向左执行了三次,再进行相+

这句b=(--a)+(--a)+(--a);

相当于
- -a;
- -a;
- -a;
b=a+a+a;

b=(--a)+(--a)这句也一样

相当于
- -a;
- -a;
b=a+a;

1楼说对了点
2楼估计是太忙 没时间算9+8+7=24
3楼的大哥太没有专业精神了!!! 9+8+7+6=29?????你在读小本??
4楼的……………………哎…………你干嘛不拿程序试一下呢……

给你答案!!!!!!!!!!!!!!!

加法是2目运算符 也就是x=y+z的形式
当计算x=a+b+c时先计算a+b赋值给x,再计算x=x+c

所以:
计算b=(--a)+(--a)时
先是--a(a变成了9)再--a(a变成了8)
然后b=a+a=8+8=16

计算b=(--a)+(--a)+(--a)时是先计算的b=(--a)+(--a)=16
然后在计算b=b+(--a)=16+7=23

a=7;b=21的
不是23
先算--a
一共三次
所以a最后为7
再算b=(--a)+(--a)+(--a)=7+7+7=21;

括号的优先级最高,先算括号里面的内容 三次渐减后 a=7 b=9+8+7
就这样了,其他的依此类推

chnrena 正解
o(∩_∩)o...
以下为修改后:
--a和a--都能执行 a-1
区别是 --a是用前减 , a--是用后减
例如:
b=(--a)+(--a)+(--a)+(--a)的话, a=6,b=6+7+8+8=29
b=(a--)+(a--)+(a--