printf函数参数的执行顺序的简单探究

时间:2023-01-09 22:29:00


大部分人应该都对printf函数比较了解,这也是作为c语言初学者第一个遇到的函数吧!!

哈哈,就是那个什么(打印hello,world)啊,当时当被问到printf函数的执行顺序的时候,好多人应该都不清楚,但是作为对c语言了解,并且用惯了vc6.0的人来说,可能知道,它的运算顺序是从右往左,但是,真的是这样的吗??



下面我们通过如下的语句来验证一下:

printf("%d   ,   %d     ,%d\n",i++, ++i, i);  


程序1:

[cpp]  view plain  copy
  1. #include <stdio.h>  
  2. #include <conio.h>  
  3.   
  4. int main(){  
  5.       
  6.     int i = 3;  
  7.     printf("%d   ,   %d     ,%d\n",i++, ++i, i);  
  8.     printf("i is %d\n", i);  
  9.     getch();  
  10.     return 0;  
  11.       
  12. }  

window(VC6.0)

printf函数参数的执行顺序的简单探究

根据两个printf函数打印的结果以及第一个printf函数打印最右边的值

可以得出简单的结论:在vc6.0中,printf函数的结合性是从右到左的:

最右边为3,然后进行中间的++i,由于先执行加1运算(之后i=4),所以整体中间的输出为4,最后执行最左边的i++,由于是先用原值,所以此刻输出为4,等到printf函数执行完之后,i执行加1操作,此刻i变为5

所以第二个printf函数打印i的值为5



linux,window(dev-C++)

printf函数参数的执行顺序的简单探究

哈哈,是不是懵逼了呢??linux底下,并不是这样是实现的啊!!!

恩恩,仔细想了一会还是可以想明白的:

Linux中的printf是从左往右的

第一个printf函数先执行的是最左边的i++(这里说,应该用原值参与后续运算,然后加1,但是,我觉得在linux里面,printf函数如果参数有自增自减,那么请无视后续运算符),故i+1,变成了4,之后遇到(++i)(请无视后续运算符,哈哈),直接加1,所以i的值此刻是5,再之后遇到i输出,输出5,此时i还是为5

第二个printf函数打印i的值,所以输出为5



简单总结:

printf函数参数执行的问题:

VC6.0:                     从右到左

linux,dev-c++:       从左到右


当printf函数混合自增自减的时候

对于VC6.0而言:将printf函数当作后续运算符(对前置后置而言)

linux,dev-c++:请无视后续运算符(对前置后置而言),就当作是没有


对自增自减运算符还有疑惑的同学可以参考这篇博客:http://blog.csdn.net/msdnwolaile/article/details/50614626