C语言的i++类问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 01:00:16
main()
{int a=3,b;
b=(++a)+(++a)+(++a);
printf("b=%d,a=%d",b,a);
getchar();
getchar();
}
结果是a=6,b=16这个能解释下吗,谢谢了
另外,为什么不能写成(++a)+(++a)+(++a)=b

第一问不能解释,这个问题一般随系统和编译器不同而不同,基本属无意义问题。

第二个问题是这样,b必须写左边,=不是等于是赋值,被赋值数必须是左值,所谓左值就是要放在=的左边

vc2008和c++builder6.0下
a=6,b等于18
b=(++a)+(++a)+(++a)
根据优先级,先算括号内的值,++a是先把a的值加1,然后返回a的值,相当于a=a+1
第一个(++a),结果是(a),a的值是4
第二个(++a),结果是(a),a的值是5
第三个(++a),结果是(a),a的值是6
然后计算a+a+a是6+6+6,结果是18

(++a)+(++a)+(++a)不能做左值

等号的作用是把右侧的值赋给左侧
b没有初始值,不能给(++a)+(++a)+(++a)赋值因而不能放在等号的右边

运行过程中
a=3;
++a;//a=4
b=(++a)+(++a)+4;
++a;//a=5
b=(++a)+5+4;
++a;//a=6
b=6+5+4;//已运行过,b的结果是15,a的结果是6