回复 楼主 greennet111
printf("%d\t%d\t%d\t%d\n",++i,--i,i--,i++);
这跟编译器有关系。
C中规定:printf函数内有表达式,遵从右结合:即计算顺序为i++,i--,--i,++i.(注意++i和i++的区别)。
下面是跟编译器有关:
(<-------)
在Turbo C中:i=3,如printf("%d,%d",++i,i++)函数,(i++)=3,(i=4);(++i)=5,(i=5);所以输出 5,6;
所以:(i++)=3,(i=4);(i--)=4,(i=3);
(--i)=2,(i=
2);(++i)=3,(i=3).根据printf的输出顺序所以为:3 2 4 3
VC编译器中:i=3,如printf("%d,%d",++i,i++)函数,(i++)=3,(当前i值不变仍为3,即this->i=3,但执行printf()函数体完后自行加1,);表达式(++i)=4,(当前i值加1,即this->i=3+1=4,++i值为4),此时执行完函数:(this->i)++,所以i=5.输出为 4,3(实际上可以看出this->i的值就是i++等表达式的值)
所以(i++)=3,(this->i=3);(i--)=3,(this->i=3);(--i)=2,(this->i=2);(++i)=3,(this->i=3)所以3 2 3 3,执行完毕printf()函数执行(this->i)++,
(this->i)--,即i=3。与编译器内部规定计算顺序有关。
不过,表达式多次使用a++形式容易出错,一个好的程序员应该避免这种情况。附上关于++运算的文章,对你应该很有帮助
附:http://wenku.baidu.com/view/1c5de1e1524de518964b7d8e.html