作业帮 > 综合 > 作业

int a=6,b;b=a+++a++;

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/11 12:56:11
int a=6,b;b=a+++a++;
结果中 a的值为8 为何b的值为12 而不是13?
编译器不一样,结果不一样,你的编译器应该是这样 b=(a++)+(a++),2个a的值先使用在自加,所以才是12
再问: 两个括号中的后自增应该是有先后顺序的,否则a的值也不会是 8; 根据+号的结合性(从左到右), 应该是前面的a++ 运算后,与 后面的 a++表达式的值进行加法、 也就是 b= 6+ 7 , 第一个a++运算后,a的值应该是7 ,第二个a++运算后,a的值变为8 。
再答: 这是编译器的原因,它统一将表达式里的值都先用原来的值使用运算,在自加
再问: y=(x++)+(x++); 如果写成这样的话,按道理应该是先把括号里面的表达式计算出来之后再加法运算吧。 可是y的值仍然是12。 VC6.0 和C-FREE下的结果。
再答: 12不就对了吗,++在后面,先使用值在自加,两个x++的值都是6
再问: 两个括号执行应该是有先后顺序的。 也就是说 两个括号里面的表达式值并不都是 6 啊。
再答: 不是说了吗,编译器统一先使用值在进行自加,其实就是y=6+6,x++作用只是改变x的值
再问: 那是不是可以理解为,有时候编译器并没有完全遵循语法在执行。 我仍然死板地认为 两个括号里面的表达式是应该先执行的。。然后才去做加法运算。
再答: 说了编译器不一样,结果不一样,你也别太纠结这问题,我看过一本叫C陷进与缺陷的书,挺不错了,上面有说各类问题