这是转载的孔雀东南飞的文章
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++);
这是转载的孔雀东南飞的文章相关推荐
- 如何转载别人的CSDN文章
本文转自:https://blog.csdn.net/qq_31001889/article/details/80322564 起意 看到一篇不错的博客,想转载但是不会(没有转载键),网搜发现没有Ch ...
- 2021-08-31 转载 Scala Akka 系列文章
Akka系列总目录 https://www.jianshu.com/c/e3c378a1b865 Akka系列(一):Akka简介与Actor模型 https://www.jianshu.com/p/ ...
- 【转载声明】转载本博客的文章请注明原始出处和作者
今天在无意间发现了自己的博客文章被 腾讯云社区,企鹅号,天天快报 转载,并且文章内容缺失的一塌糊涂,很多关键性的段落,图片,以及代码丢失,很容易给读者朋友带来困惑和误导. 我在这篇博客中对这件事儿进行 ...
- 从0开始学习 GitHub 系列之「05.Git 进阶」----转载自stormzhang 原创文章
关于 Git 相信大家看了之前一系列的文章已经初步会使用了, 但是关于Git还有很多知识与技巧是你不知道的,今天就来给大家介绍下一些 Git 进阶的知识. 1. 用户名和邮箱 我们知道我们进行的每一次 ...
- 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」----转载自stormzhang 原创文章
之前的这篇文章「从0开始学习 GitHub 系列之「Git速成」」相信大家都已经对 Git 的基本操作熟悉了,但是这篇文章只介绍了对本地 Git 仓库的基本操作,今天我就来介绍下如何跟远程仓库一起协作 ...
- 从0开始学习 GitHub 系列之「08.如何发现优秀的开源项目」----转载自stormzhang 原创文章
之前发过一系列有关 GitHub 的文章,有同学问了,GitHub 我大概了解了,Git 也差不多会使用了,但是 还是搞不清 GitHub 如何帮助我的工作,怎么提升我的工作效率? 问到点子上了,Gi ...
- 从0开始学习 GitHub 系列之「01.初识 GitHub」----转载自stormzhang 原创文章
1. 写在前面 我一直认为 GitHub 是程序员必备技能,程序员应该没有不知道 GitHub 的才对,没想到这两天留言里给我留言最多的就是想让我写关于 GitHub 的教程,说看了不少资料还是一头雾 ...
- 从0开始学习 GitHub 系列之「03.Git 速成」----转载自stormzhang 原创文章
前面的 GitHub 系列文章介绍过,GitHub 是基于 Git 的,所以也就意味着 Git 是基础,如果你不会 Git ,那么接下来你完全继续不下去,所以今天的教程就来说说 Git ,当然关于 G ...
- 从“任我行”博友转载的一篇文章:堆和栈的区别
堆和栈的区别 (转贴) 非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥! 堆和栈的区别 一.预备知识-程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1.栈区(st ...
- Java中IO流,输入输出流概述与总结(转载自别先生文章)
Java中IO流,输入输出流概述与总结 总结的很粗糙,以后时间富裕了好好修改一下. 1:Java语言定义了许多类专门负责各种方式的输入或者输出,这些类都被放在java.io包中.其中, 所有输入流类都 ...
最新文章
- Python中的变量以及赋值语句
- 疫情排查节时86%?不会代码也能玩转模型训练?腾讯大神揭秘语音语义及AutoML黑科技 | 内含福利...
- Go -- 一致性哈希算法
- P2P中DHT网络原理
- 技术干货-PCB彩印教程(水转印)
- FileReader/FileWriter复制文件
- Php与mssql数据交互
- java 垃圾回收 新生代_Java垃圾回收
- 5分钟就能完成的Python小项目,赶紧拿去玩玩吧
- 浏览器访问网页的详细内部过程
- linux下qt制作日历,课内资源
- 如何导出源文件_正骨室001期 | 如何避免色彩损失
- Vue.js 条件与循环
- 林正隆(coolfire)
- SQLServer 删除表中重复数据(除ID不同的)
- 高斯白噪声仿真-复信号分析
- 选型宝分享上市公司女CIO亲身讲述BPM系统选型历程
- Spring Web 编程详解
- 哪里买. com最便宜?
- 第一次如何选择流量卡,长期套餐和短期套餐哪个好一点?