这个自增运算实在搞不懂了,,,
#include <stdio.h> int main() { int m,n,i=15,j=20; m=(i++)+(i++)+(i++);n=(--j)+(--j)+(--j); printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n); return 0; }
为啥m直为45而不是15+16+17=48,n值为53不是19+18+17=54、、
#include <stdio.h> int main() { int m,n,i=15,j=20; m=(i++)+(i++)+(i++);n=(--j)+(--j)+(--j); printf("i=%d,j=%d,m=%d,n=%d\n",i,j,m,n); return 0; }
为啥m直为45而不是15+16+17=48,n值为53不是19+18+17=54、、
2015-10-20
这算是化石级的经典错误了...
第5行,这个两个关于i和j表达式的行为是未定义的,不同编译器也许会得出不同的结果。别去分析为什么会得出这个值或是那个值了,这种写法根本就是个错误!
详细的原因请看这里我的回答 http://www.imooc.com/qadetail/87888
注意那个“序列点”的概念,你这个表达式的问题和我在那个帖子中解释的一样:在求m和n的这两个语句中,你无法确定 i 和 j 都是什么值。
举报