关于printf函数、自加运算

    技术2025-10-19  7

    在学习指针的时候,碰到了printf语句,并且里面常常有何自加,自减运算连用。经过尝试,得到一些结论,不知正确与否。

     

    1.不论在TC,VC6.0还是VS2008中,printf语句是自右向左执行的。

    2.具体的编译器会有不同的理解方式,应尽量避免这样的写法。

     

     

    下面是从网上找的一个例子(来源:http://hi.baidu.com/tonydelwee/blog/item/2e683a1aa31320e9af5133c6.html)

     

    #include <stdio.h> void main() { int i=2; printf("%d,%d,%d,%d,/n",i++,++i,i,i++); printf("%d/n",i); }

    在VC++6.0中的规则如下: 1、i遇到了就直接使用 ;2、++i先加1,再使用加过1的i; 3、i++先使用i,再加1,但是要在整条语句结束以后才自加1。printf("%d,%d,%d,%d,/n",i++,++i,i,i++); 从右往左运算: i++得到2(i=2,后加1在整条语句执行完才进行) ++i得到3(i=3,先加1,后使用) i++得到3(i=3,后加1在整条语句执行完才进行) 所以输出结果为:3,3,2,2 然后计算刚才的两次后自增运算后,i=5 printf("%d/n",i); 所以,结果是5

     

    在VS2008中的规则我不太清楚,我的猜测是这样的: 

    1.++i只执行加法但不显示,等到所有的都计算完了再使用

    例:printf("%d,%d,%d,%d,/n",i++,++i+1,i,i++);

    结果为:4,6,5,2(显然++i+1里的i是最后用的)

     

    2.i等所有的计算完成了,再使用

    例:printf("%d,%d,%d,%d,/n",i++,++i,i+1,i++);

    结果是:4,5,6,2(i+1的结果为6,也验证了i是等所有自加运算结束以后才使用的。)

     

    3.i++先使用,紧接着再执行加法,不必等到整条语句都执行完了

    例如:对于printf("%d,%d,%d,%d,/n",i++,++i,i,i++);

    结果是:4,5,5,2

     

     

    其他:

    对于本程序,VS2008里的第二个printf语句就显得多余了,因为第一句就已经体现了i最终的值,而在VC6.0里第二个printf语句则是十分必要的。

     

     

    最新回复(0)