一个运算问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 08:42:23
int a,b,c,d;
a=b=1;
c=(a++)+(a++)+(a++);
d=(++b)+(++b)+(++b);
在VC里结果为a=4,b=4,c=3,d=10;

我的思维是:a++=1,a=2 然后a++=2,a=3 最后a++=3,a=4
c=1+2+3=6 ,a=4
这里C怎么是3???

还有 ++b=2,b=2 然后++b=3,b=3 最后++b=4 b=4
d=2+3+4=9
这里d怎么是10???

既然最后的a和b的值是对的?那最后c和d不对???

那个^^^^^
c=(a++)+(a++)+(a++);是很容易出现歧义的
比如在TURBOC 和MS C中,把a=1作为表达式中所有a的值,因此三个1向加等于3
在求出整个表达式的值后在实现三次自增 所以a=4,c=3
当然有的系统是按照自左向右的顺序求算的
就象你写的那样
c=(a++)+(a++)+(a++);这种写法是一般不会用的
可以替换成别的

楼主。。这个问题被问了N+1次了。。。不同编译器里这类的结果会有不一样的。所以不要砖牛角。
你只要记清楚
a++和++a的区别就OK了·

再次深恶痛绝的强调。不同编译器结果不一样!!!!
不要砖牛角。
记住最基本的就OK了

hehe,你把楼上的问急了。。
其实他说的很对,这种东西是跟编译环境相关的,但是而这其实也有细微的效率差别,在经典教材《c++ primer》中有详细介绍。
这也告诉我们学生教材上很多东西,只是屠龙之术,考试记一记就算了,千万别再程序中写类似的代码,要不调试的时候你会有想死的感觉,别人看你的代码的时候也会不断的咒骂你。
有些东西是来考试的,不是用的

这个运算是跟编译器有关的,不同的编译器的结果也不尽相同。

在该程序段中,对c=(a++)+(a++)+(a++);应理解为3个i相加,故c值为3.
然后a自加1,三次累加之后a=4;这可以是因为小括号优先级高,所以a先参与运算即c=1+1+1;运算完a再运算自加如果不运算a则自加运算也不执行。然后3次自加得到4