标签:
作为一个天天和代码“约会”的人来说i++和++i这玩意再熟悉不过了,因为使用频率太高了。
虽然如此,但也未必见得我们真的了解她,不妨猜猜下面的输出结果。
1 #inlcude <stdio.h> 2 3 int main(void) 4 { 5 int i = 0, j = 0; 6 7 printf("i[1] = %d i[2] = %d\n", i++ + ++i, ++i + i++); 8 9 printf("j[1] = %d j[2] = %d\n", j++ + j++, ++j + ++j); 10 11 return 0; 12 }
想要得出正确答案,仅仅知道前+和后+的区别是不够的,这里面有两个坑。
第一个是cpu处理前+和后+真正的执行过程。
第二个坑是printf这个“小妾”暗藏一腿。
先把简单的第二个坑填了,以一般的思维和习惯会下意识的认为printf先计算前面那个表达式(即代码中的i[1] 和 j[1]),然后计算后面那个表达式的值(即 代码中的i[2]和j[2]),事实却正好相反,要先算后面再算前面。
标签:
原文地址:http://www.cnblogs.com/tid-think/p/5136574.html