今天一位同学问我一个问题是这样的,i=3, (++i)+(++i)+(++i) (i++)+(i++)+(i++);或许大家一看就明白一定是大学的C++课程,我和快的给出了答案,可是他告诉我是错的,我一下子愣住了,思考了好久也没觉得哪里出了问题,其实大家基本都知道 后置运算:k++表示先运算,后自加,前置运算:++k表示先自加,后运算 ,所以我就写了一段程序测试,结果出来我一下子傻了眼:
#include<stdio.h>
int main()
{
int i = 3, k = 3;
int a, b;
a = (i++) + (i++) + (i++);
b = (++k)+(++k) + (++k);
printf("%d %d\n", a, i);
printf("%d %d", b, k);
return 0;
}
我觉得不对,所以讲代码又copy到了devc++里面,看到结果又愣了
后来我查了资料,这是编译器不同的问题,也分析了原因,18=6+6+6,16=5+5+6,第一个好理解,第二个是因为第一个括号算出来是4,到第二个成了5,所以4就会变成5,最后一个变成6,大家还有其他理解方式吗?