int main()
{
int n = 3;
printf("%dn", (n++)+(++n)+(n++));
printf("%dn", n);
int m = 3;
printf("%dn", (m++)+(++m));
printf("%dn", m);
return 0;
}
我自己试了一下,在Windows和linux,这个程序运行的结果相同,都是 12 6 8 5.
由此可以推算一下运行的方式,很明显,对于 (n++)+(++n)+(n++) 的计算,不是 ((n++)+(++n))+(n++)来的,不然结果就是 8+6=14了.反之也不对.
唯一的解释就是,12 = 4+4+4, 8=4+4.也就是说,以上两个计算当中,值只增加了1次,在算出结果之后,值才按我们预期的计算.
于是我有试了一下:
int j = 3;
printf("%dn", (j++) + (j++));
printf("%dn", j);
结果正如我所料,是 6 5.
结论:在 ++x 与 x++ 的连续表达式中,先计算 ++x 的数量,每有1个 ++x, x的值增加1;然后进行 运算符(+,-)运算,最后执行 x++运算.