问大家一道C语言的题?

来源:百度知道 编辑:UC知道 时间:2024/06/06 22:26:51
int a=5,b;
b=(++a)+(++a)+(++a);
这个b的结果为什么是22啊.实在想不通,高手给我解答下啊

在VC上是24

它是先运算自加操作在进行加法运算

一般都会认为答案是21
如果把b=(++a)+(++a)+(++a);
改成
b=(++a);//6
b+=(++a);//13
b+=(++a);//21
得到的结果是21.

但是结果却是22.
考虑下运算顺序,由于第一个++a有括号,所以要先计算,那么a=6了;
接下来运算加法,但是第二个++a的优先级也高于第一个加法,所以也要先计算,这是a=7;
下面就是问题关键所在了,实际这是做的加法是a+a,而并非数字运算6+7,所以这是的结果是7+7=14,最后再加上8,得到12

不可能的,是24,如果是22那肯定是你的运行系统不对,或者是答案错了,
应该是24,因为a的值是5,++a后的值为6++a后为7++a后为8,最为a是个变量,所以在内存中有一个a的空间,a的值改变后a原先的值要覆盖,所以a的值为8,最后三个8相加为24.

感觉24有道理,但是,我运行的结果确实是22,这是为什么呢?