今天突然发现了一个问题
#include <stdio.h> int main(int argc, char* argv[]) { int i = 0; i = 0; printf("%d,%d,%d,%d\n",i, i++,++i,i); i = 0; printf("%d,%d,%d,%d\n",i, ++i,i++,i); return 0; }
为什么这个程序 的输出结果是
2,1,2,2
2,2,0,2
首先,应该说明的是在不同的编译环境中结果是不一样的。
关于本段代码在VC++6.0中的规则如下:
1、printf函数的执行顺序是由右到左的
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的***
最后发现没有混淆++i和i++的使用,反而发现了printf的问提。看来以后为了程序的可移植性,小心使用++i,i++,printf.
顺便在这分享一下我记忆++i和i++的技巧:
(++i):加号在前,先加后用
(i++):加号在后,先用后加