printf函数对参数的计算顺序,是从右往左的

#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、printf函数的执行顺序是由右到左的 
2、前自增运算符(++i)先加1,再使用i,此时i已经加了1; 
3、后自增运算符(i++)先使用i,再加1,***注意这里是关键所在,VC++6.0后自增运算是要在整条语句结束以后才自加1的!

所以: 
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=5

printf("%d\n",i); 
所以,结果是5

-----------------------------------------------------------------------------------

关于下面的程序:

#include <stdio.h>
void main()
{
int a=5,b=2;
printf("%d %d\n",b=a+1,a=a+1);
}

输出结果是:7 6
而不是:6 6

这是因为printf函数的计算是从右向左进行的。


另外关于下面程序的解释:
int i=7; printf("%d\n", i++ * i++); 
输出结果是:49而不是56
int i=7;printf("%d %d\n",++i,i++);
输出结果是:8 7而不是9,7 这并不违背分割新上面关于printf函数从右向左计算的原因。

总结:到这里,要掌握的是两点,

一是:printf函数中的计算是从右向左进行的。

二是:我们在写代码时,应该尽量避免类似下面的无确定意义的表达式出现,因为很有可能不同的编译器,会采用不同的理解方式。
例如:

a+=a++;
a[i]=i++;
printf("%d %d\n",++i,i++);

这是转载的孔雀东南飞的文章相关推荐

  1. 如何转载别人的CSDN文章

    本文转自:https://blog.csdn.net/qq_31001889/article/details/80322564 起意 看到一篇不错的博客,想转载但是不会(没有转载键),网搜发现没有Ch ...

  2. 2021-08-31 转载 Scala Akka 系列文章

    Akka系列总目录 https://www.jianshu.com/c/e3c378a1b865 Akka系列(一):Akka简介与Actor模型 https://www.jianshu.com/p/ ...

  3. 【转载声明】转载本博客的文章请注明原始出处和作者

    今天在无意间发现了自己的博客文章被 腾讯云社区,企鹅号,天天快报 转载,并且文章内容缺失的一塌糊涂,很多关键性的段落,图片,以及代码丢失,很容易给读者朋友带来困惑和误导. 我在这篇博客中对这件事儿进行 ...

  4. 从0开始学习 GitHub 系列之「05.Git 进阶」----转载自stormzhang 原创文章

    关于 Git 相信大家看了之前一系列的文章已经初步会使用了, 但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些 Git 进阶的知识. 1. 用户名和邮箱 我们知道我们进行的每一次 ...

  5. 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」----转载自stormzhang 原创文章

    之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作 ...

  6. 从0开始学习 GitHub 系列之「08.如何发现优秀的开源项目」----转载自stormzhang 原创文章

    之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是 还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Gi ...

  7. 从0开始学习 GitHub 系列之「01.初识 GitHub」----转载自stormzhang 原创文章

    1. 写在前面 我一直认为 GitHub 是程序员必备技能,程序员应该没有不知道 GitHub 的才对,没想到这两天留言里给我留言最多的就是想让我写关于 GitHub 的教程,说看了不少资料还是一头雾 ...

  8. 从0开始学习 GitHub 系列之「03.Git 速成」----转载自stormzhang 原创文章

    前面的 GitHub 系列文章介绍过,GitHub 是基于 Git 的,所以也就意味着 Git 是基础,如果你不会 Git ,那么接下来你完全继续不下去,所以今天的教程就来说说 Git ,当然关于 G ...

  9. 从“任我行”博友转载的一篇文章:堆和栈的区别

    堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥! 堆和栈的区别 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(st ...

  10. Java中IO流,输入输出流概述与总结(转载自别先生文章)

    Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...

最新文章

  1. Python中的变量以及赋值语句
  2. 疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...
  3. Go -- 一致性哈希算法
  4. P2P中DHT网络原理
  5. 技术干货-PCB彩印教程(水转印)
  6. FileReader/FileWriter复制文件
  7. Php与mssql数据交互
  8. java 垃圾回收 新生代_Java垃圾回收
  9. 5分钟就能完成的Python小项目,赶紧拿去玩玩吧
  10. 浏览器访问网页的详细内部过程
  11. linux下qt制作日历,课内资源
  12. 如何导出源文件_正骨室001期 | 如何避免色彩损失
  13. Vue.js 条件与循环
  14. 林正隆(coolfire)
  15. SQLServer 删除表中重复数据(除ID不同的)
  16. 高斯白噪声仿真-复信号分析
  17. 选型宝分享上市公司女CIO亲身讲述BPM系统选型历程
  18. Spring Web 编程详解
  19. 哪里买. com最便宜?
  20. 第一次如何选择流量卡,长期套餐和短期套餐哪个好一点?

热门文章

  1. 独家:程序员必备Java API和类搜索辅助工具发布
  2. 计算机水冷散热器原理,水冷散热器原理和作用是什么
  3. Java实现视频通话
  4. 西游记中唐僧禅心坚定不好女色
  5. 证券行业的数字化转型:金融业务与金融科技的共生发展
  6. 移动vue大转盘抽奖
  7. Guarded Suspension模式
  8. Win8.1在关机界面卡住无反应问题的解决
  9. 力扣刷题 DAY_78 贪心
  10. 伦敦银短线交易_MOM指标