读书人

++ amp; - 的有关问题

发布时间: 2012-02-19 19:43:38 作者: rapoo

++ & -- 的问题
#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吧

读书人网 >C语言

热点推荐