|
发表于 2013-3-20 12:24:52
|
显示全部楼层
本帖最后由 huise865 于 2013-3-20 12:34 编辑
我是师兄 发表于 2013-3-20 10:11
就算真的是从右向左求值 你怎么确定第二个 i 求值的时候 第一个表达式的副作用已经完成
你可能没有理解++运算符;
++i,--i,i++,i--,-i++,-i--
首先执行-i-- ,此时取i的值为8,输出 -8 ;
执行 -i++ , 此时i的值为8 ,输出 -8 ;
执行 i-- , 此时i的值为8 ,输出 8 ;
执行i++,此时i的值为8 ,输出8;
执行--i ,先运算再输出 ,i此时的值为8 ,8-1=7,输出 7;
执行++i,先运算再输出,i此时的值为7 ,7+1=8,输出 8;
所以结果是 :8 7 8 8 -8 -8
i--和i++运算所得的结果在下一语句才会生效,因为他们是先输出在运算的;
--i和++i是先运算在输出,所以结果即可生效;
如果你不相信,那你可以这样试试:
int i = 8;
printf("%d %d %d %d %d %d %d %d",i--,i--,i--,i--,i--,i--,i--,i--);
printf("%d %d %d %d %d %d %d %d",i++,i++,i++,i++,i++,i++,i++,i++);
printf("%d %d %d %d %d %d %d %d",++i,++i,++i,++i,++i,++i,++i,++i);
printf("%d %d %d %d %d %d %d %d",--i,--i,--i,--i,--i,--i,--i,--i);
然后看看结果就知道为什么了!
|
|