经过我参考网上的资料 ,还有自己的实践给兄弟一个满意的解释:
首先咱先看下下面这个小程序
#include <stdio.h>
int main()
{
int a = 5, b = 2;
printf("%d %d\n", b = a + 1, a = a + 1);
//输出7 6 ,而不是你想象的6 6
}
这是因为,对于VC++6.0中的规则如下:
1、printf函数的执行顺序是由右到左的
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;
3、后自增运算符(i++)先使用i,再加1,注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的,(VC++6.0比较变态)
也就是说上面这个小程序的执行顺序是
a = a + 1 -> a = 6
b = a + 1 -> b = 7
接下来再看你的程序就比较好理解了.
#include <stdio.h>
int main()
{
int i = 6;
printf("%d\n", ++i);//7,这个没问题
i = 6;
printf("%d %d %d %d %d", ++i, i++, i--, --i, -i--);
//6 5 5 5 -6
printf("%d", i); //5
getchar();
return 0;
}
首先我的机子上没有VC6.0,所以,我试着进行推导一下
1.执行-i--,得到i = 6, 输出-6,--将会在print完了之后才会显现作用,先记着
2.执行--i,得到i = 5,输出5
3.执行i--,得到i = 5,输出5,--将会在print完了之后才会显现作用,先记着
4.执行i++,得到i = 5,输出5,++将会在print完了之后才会显现作用,先记着
5.执行++i,得到i = 6,输出6
整个执行完之后,i值为5.
如果满意,别忘了分昂!