C语言格式输出函数printf详解( 三 )


【例4-5】在一个()里输出

  1. #include
  2. int main(void){
  3. int i=8;
  4. printf("The raw value: i=%d\n", i);
  5. printf("++i=%d \n++i=%d \n--i=%d \n--i=%d\n",++i,++i,--i,--i);
  6. return 0;
  7. }

运行结果:
The raw value: i=8
++i=8
C语言格式输出函数printf详解

文章插图
++i=7
--i=6
--i=7
【例4-6】在多个()里输出
  1. #include
  2. int main(void){
  3. int i=8;
  4. printf("The raw value: i=%d\n", i);
  5. printf("++i=%d\n", ++i);
  6. printf("++i=%d\n", ++i);
  7. printf("--i=%d\n", --i);
  8. printf("--i=%d\n", --i);
  9. return 0;
  10. }

运行结果:
The raw value: i=8
++i=9
++i=10
--i=9
--i=8
这两个程序的区别是用一个语句和多个 语句输出 。但从结果可以看出是不同的 。为什么结果会不同呢?就是因为函数对输出表中各量求值的顺序是自右至左进行的 。
但是必须注意,求值顺序虽是自右至左,但是输出顺序还是从左至右,因此得到的结果是上述输出结果 。
注意:经读者 @龍騰浩少 反馈,我们发现原来的例子在VC6.0下计算过程比较复杂,不能直观的说明自右向左的求值顺序 。上面的代码是修改后的,修改日期为 2014-07-05 。
下面是老代码及分析:
【例4-5】
main(){
int i=8;
("%d\n%d\n%d\n%d\n%d\n%d\n",++i,--i,i++,i--,-i++,-i--);
}
【例4-6】
main(){
int i=8;
("%d\n",++i);
("%d\n",--i);
("%d\n",i++);
("%d\n",i--);
("%d\n",-i++);
("%d\n",-i--);
}
【C语言格式输出函数printf详解】这两个程序的区别是用一个语句和多个 语句输出 。但从结果可以看出是不同的 。为什么结果会不同呢?就是因为函数对输出表中各量求值的顺序是自右至左进行的 。在第一例中,先对最后一项“-i--”求值,结果为-8,然后i自减1后为7 。再对“-i++”项求值得-7,然后i自增1后为8 。再对“i--”项求值得8,然后i再自减1后为7 。再求“i++”项得7,然后i再自增1后为8 。再求“--i”项,i先自减1后输出,输出值为7 。最后才求输出表列中的第一项“++i”,此时i自增1后输出8 。