首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

++ & - 的有关问题

2012-02-19 
++ & -- 的问题#includestdio.hintmain(void){inti3inta1,a2,a3,a4,a5,a6,a7,a8,a9,a10a1(++i)+(++i

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

热点排行