++ & -- 的问题
#include <stdio.h>
int main(void)
{
int i = 3;
int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;
a1 = (++i) + (++i) + (++i);
i = 3;
a8 = (++i) + (++i) + (++i) + (i++);
i = 3;
a9 = (++i) + (++i) + (++i) + (i++) + (i++);
i = 3;
a10 = (++i) + (++i) + (++i) + (i++) + (i++) + (i++);
i = 3;
a2 = (--i) + (--i) + (--i);
i = 3;
a3 = (i++) + (i++) + (i++);
i = 3;
a4 = (i++) + (i++) + (i++) + (++i);
i = 3;
a5 = (i++) + (i++) + (i++) + (++i) + (++i);
i = 3;
a6 = (i++) + (i++) + (i++) + (++i) + (++i) + (++i);
i = 3;
a7 = (i++) + (i++) + (i++) + (++i) + (++i) + (++i) + (++i);
printf( "a1 = %d\n ", a1);
printf( "a2 = %d\n ", a2);
printf( "a3 = %d\n ", a3);
printf( "a4 = %d\n ", a4);
printf( "a5 = %d\n ", a5);
printf( "a6 = %d\n ", a6);
printf( "a7 = %d\n ", a7);
printf( "a8 = %d\n ", a8);
printf( "a9 = %d\n ", a9);
printf( "a10 = %d\n ", a10);
}
/*
结果
a1 = 16
a2 = 2
a3 = 9
a4 = 13
a5 = 18
a6 = 24
a7 = 31
a8 = 22
a9 = 28
a10 = 34
*/
我不明白,计算顺序是怎样的,
[解决办法]
a1=18;
a2=0;
a3=9;
a4=16
a5=25;
a6=36;
a7=49;
a8=24;
a9=30;
a10=36;
这是在Turbo C里的运行结果.楼主的结果应该是用VC得到的吧.
不同的编译器有不同处理方法.
比如a1,我们理解应得到的15在这两个编译器里都未能得到.
如果要深入理解,可能需要参考一些技术文档,比如这些编译器的源码.
[解决办法]
一般地:
对于表达式 (++i)或(--i)
产生的效果是这样的:首先将变量i的值加1或减1 然后将加1或减1 后 的i值作为整个表达式的值 [注意:在C中任何表达式都是有值的]
对于表达式 (i++)或(i--)
产生的效果是这样的:首先将i值作为整个表达式的值 然后i的值加1或减1
主要是弄懂上面两个潜规则 至于那段长代码,具体的输出值跟编译器相关 至于为什么会有此差异 问GOOGLE吧