请问个i++的有关问题

请教个i++的问题。
main()
{
   int i,a[10];
   for(i=0;i<=9;)
   {
      a[i++]=i;
   }
   for(i=9;i>=0;i--)
   {
      printf("%d",a[i]);
   }
}
为什么程序的输出是9876543210,而不是10987654321?
------解决方案--------------------
引用:
引用:引用:LZ的意思好像是问i++为什么没有加上去,大家好像答非所问
无汇编,无真相。
汇编还不会啊。并且我用的是vs2010,看内存和寄存器的变化也不会。
我看这种情况我还是先记忆一下吧。


VC调试时按Alt+8、Alt+6和Alt+5,打开汇编窗口、内存窗口和寄存器窗口看每句C对应的汇编、单步执行并观察相应内存和寄存器变化,这样过一遍不就啥都明白了吗。
对VC来说,所谓‘调试时’就是编译连接通过以后,按F10或F11键单步执行一步以后的时候,或者在某行按F9设了断点后按F5执行停在该断点处的时候。

------解决方案--------------------
引用:
说错了。
那么是不是说i--是用后自减。++i是自增后用,--i是自减后用呢?
 请高手指点。

i++,先让i参与表达式中的计算,再自增。
++i,先让i自增,自增的结果再参与表达式的计算。
比如,
i=5;
j=i++;     //执行后j=5
a=5;
b=++a;     //执行后b=6

至于同一个表达式中有多个++,可能需要考虑编译器的执行顺序等因素。

------解决方案--------------------
引用:
接上。。。

main()
{
         int i =0,a;
a = (i++)*i+6*(4*(i--))+6;
printf("%d,%d\n",a,i);
}
最后输出为a=6;i=0;
那么是不是说i--是用后自减。++i是用后自增,--i是用后自减呢?
请高手指点。


具体请参看副作用和顺序点,i++和i--这种情况在不同的编译器有时会有不同的结果

至于你举的这个例子,我只能说对于 a = (i++)*i+6*(4*(i--))+6;这是一个完整的表达式,一般一个完整的表达式属于一个顺序点,所以在执行这一整句之后,才执行i++和i--,而不是在执行了i++后i就加了1,所以才有楼主那个结果6.

更具体的,请参看C primer plus和本帖置顶这位大神的文章:
 [置顶] C,C++表达式求值顺序 裘老的解释。 [推荐]