printf函数对参数的计算顺序printf函数对参数的计算顺序,是从右往左的。#includestdio.hintmain(){inti=2;printf(%d,%d,%d,%d,\n,i++,++i,i,i++);printf(%d\n,i);return0;}首先,应该说明的是在不同的编译环境中结果是不一样的。关于本段代码在VC++6.0中的规则如下:1、printf函数的执行顺序是由右到左的2、前自增运算符(++i)先加1,再使用i,此时i已经加了1;3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的,(VC++6.0比较变态)***所以:printf(%d,%d,%d,%d,\n,i++,++i,i,i++);从右往左运算:i++得到2(i=2,后加1在整条语句执行完才进行,这里先记下)i还是2(i=2,原因见上一行)++i得到3(i=3,先加1,后使用)i++得到3(i=3,后加1在整条语句执行完才进行,这里先记下)所以输出结果为:3,3,2,2然后计算刚才的两次后自增运算后,i=5printf(%d\n,i);所以,结果是5关于下面的程序:#includestdio.hintmain(){inta=5,b=2;printf(%d%d\n,b=a+1,a=a+1);return0;}输出结果是:76而不是:66这是因为printf函数的计算是从右向左进行的。另外关于下面程序的解释:inti=7;printf(%d\n,i++*i++);输出结果是:49而不是56inti=7;printf(%d%d\n,++i,i++);输出结果是:87而不是9,7这并不违背分割新上面关于printf函数从右向左计算的原因。总结:到这里,要掌握的是两点,一是:printf函数中的计算是从右向左进行的。二是:我们在写代码时,应该尽量避免类似下面的无确定意义的表达式出现,因为很有可能不同的编译器,会采用不同的理解方式。例如:a+=a++;a[i]=i++;printf(%d%d\n,++i,i++);