C语言 printf源码详解,从头一起学c语言(六)————printf函数的详解

这段时间很忙,更新的晚了,见谅。当然同样有今天我们的主角十分复杂,之前介绍了这个手记并非是面对新手的,而是我的复习手记。所以我们会讲头文件,或许有错误,如果有大手子看到,希望能够提出我的错误。

printf函数的全称为格式化输出函数。之所以叫做格式化输出,是因为这个函数提供有多种格式化输出方式,可以向标准输出中输出某种格式的内容。本次的手记的目标是详细的讲述printf函数的用法,写法,原理。

printf函数的原型为:

int printf(const char *format, ...);

也就是说printf函数的返回值是int类型的。第一个形式参数format是一个字符串,也就是格式化字符串,用于指定输出数据的个数和输出格式,而后面的", ..."说明函数在调用时除了前面的字符串参数必需之外,其余的参数数目可变(可以是0及0个以上的其他参数数目)。这些其余参数是要输出的数据,参数的个数和数据类型应与格式字符串中转换说明的个数和转换字符一致,printf的返回值是函数调用时实际输出到标准输出设备中的字符数。

为了学习printf函数我们需要先了解什么叫做转换说明(转换字符)。这是初步了解printf函数的关键。

所谓转换字符,即用来说明设定输出数据形式格式的符号。

也就是说,转换说明符是在告诉计算机,以哪种格式输出。这样子计算机就可以用你所期望的形式输出内容了。

举一个例子:

int n = 10;

printf("%d",n);

程序会在输出设备中输出10(即赋给变量n的值)。我们可以理解为在这里有了一个替换。当然,上面说到了可以有更多的参数。所以,这样的也可以:

int n= 10 ,m = 20;

printf{"%d%d",n,m};

得到的结果就是1020。

关于所有的转换字符如下图。

AAffA0nNPuCLAAAAAElFTkSuQmCC

具体的转换字符的对应关系,图上都十分清楚了,不会做更复杂的解释。只需要知道每一个对应的是什么就好了。

强调两个地方。

回答c语言入门的问题时经常遇见,printf函数怎么输入%,嗯,输入%的方法是printf("%%");这样就会输出一个%。具体原因就是printf函数是在一点一点读取你所写的内容,所以你写了一个%,它就自己把这个认作转换字符的开头了,所以我们把输出%也创建一个转化说明,这个转换字符就是%%。

关于这个的一个链接printf函数源码实现新手不需要看,想要了解的看看

前面讲了char型数据,可以尝试一下用%d和%c分别输出。你会发现%d输出了其ASCII码,而%c输出了其实际字符。

然后说一下转换字符的修饰。实际上完整的转换说明的语法形式为:%[域宽说明]转换字符,所以说我们的printf函数可以为我们提供更加细节的打印。上图,自己拍的。

AAffA0nNPuCLAAAAAElFTkSuQmCC

举几个例子,其他自己试。

#include

int main()

{

int a = 10;

float b = -8.7;

printf("%8.3d,%8.4d,%8.3f",a,a,b);

return 0;

}

此代码输出的是 010, 0010, -8.300。

哎呀,突然发现自己转换字符忘讲了。下一篇会写一下,会把前面漏掉的补充上。

以上内容,结合上一篇讲的数据类型就能够基本了解printf函数了,当然你看那个课程也能学会这些就是了,而且有实际操作的情况下那个会有更深的印象。所以要自己多试试。

下面内容就比较好玩了。

如果你学到了后面自创函数的部分,你会发现你自己写的函数貌似参数的个数都是有限的,然而,printf并非如此。我们可以让它有一个参数,有两个参数,有三个参数,是的,它是一个参数可变的函数。这就是我一直没更的一个原因,我去翻c圣经去了,从这本书中我们看到了printf函数的一点原貌。当然前面那个有自己写的print函数的链接也是实现了这个原理。

printf函数可以接受可变参数的原因就在于stdio.h文件中实际还include了一个stdarg.h头文件,这个头文件提供了遍历未知数目和类型的函数参数表的功能,而对于这个头文件,我本人并没有太多的了解,我们不会对此进行过多的讨论了。

这段时间对printf函数的一个研究也令我清醒了一些,目前自己的知识储备以及时间安排不宜与对此进行过多的研究,合理安排自己的时间和学习计划才是最正确的方法。

贴一张图:来自于知乎,希望在计算机领域走的比较元的铜须可以看看。

AAffA0nNPuCLAAAAAElFTkSuQmCC

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441865.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vla点转为lisp点_A股大涨53.70点,收复3400点,下周会继续大反弹吗?

在红周四的小惊喜之后,今天周五更是来了一个大涨的大惊喜,应验了杰克在8月27日复盘文章《以为A股会继续下跌,却上涨20.37点,明天会是大涨红周五吗》之中提出的观点——“今天上证指数的缩量反弹并不是说现在要止跌且启动反弹攻势了…

最有效的萨克斯弱音器_1990到2016年全球自杀数据公布,中国自杀死亡率下降最显著!...

最新一期的BMJ杂志上发表的一篇题为《Global, regional, and national burden of suicide mortality 1990 to 2016: systematic analysis for the Global Burden of Disease Study 2016》的研究,对1990到2016年全球自杀疾病负担进行了分析,让我们一起来看…

C语言编译不等于,为什么嵌入式C语言中的size不等于所有成员size之和

结构体在C语言程序开发中,是不可或缺的语法。不过,相信不少C语言初学者遇到过这样的问题:为什么结构体的 size 有时不等于它的所有成员的 size 之和呢?C语言结构体大小等于它的所有成员大小之和吗?举例来说&#xff0c…

ip地址合不合法怎么看_到底醇基燃料合不合法呢?

什么是醇基燃料?醇基燃料合不合法?投资醇基燃料或者自己用有没得回报呢?新能源环保燃料油配方_醇基燃料厂家加盟-四川新源素科技有限公司​www.xysu.net什么是醇基燃料醇基液体燃料主要是以甲醇、乙醇为主混配的液体燃料,甲醇是最简单的饱和脂肪醇,分…

android 通讯录 备份,安卓Android手机通讯录怎么备份 卓联系人备份 卓手机联系人导出...

一旦买新安卓手机,如何才能快速地将通讯录、短信、通话记录、图片以及音乐转移到新手机里?如果还用纯手动复制、输入的方式,就说明你out的太久了。其实,只需短短四步就可以方便的将联系人、照片、音乐、应用等等一键转移完成无缝换机。【步骤…

origin怎么打开txt文本_【每日一学】差示扫描量热法(DSC)测量材料的比热容(3在Origin软件中计算间接法测得比热容的方法)...

在本系列内容第1部分和第2部分中分别介绍了使用DSC法通过间接法测量材料的比热容的常用方法的基本原理和得到高质量比热数据的方法,在完成实验后需要在相关的分析软件中计算所研究的材料的比热容。在目前大多数商品化的DSC仪所附带的分析软件中通常可以额外配置可用…

【HDU - 2809】 God of War(状压dp)

题干: At 184~280 A.D ,there were many kingdoms in China. Three strongest among them are "Wei", "Shu", "Wu". People call this period as "Three Kingdoms". HH is a super "Three Kingdoms" fan, beca…

mysql 优化配置 大批量数据插入_[译] MySQL 最佳实践 —— 高效插入数据

当你需要在 MySQL 数据库中批量插入数百万条数据时,你就会意识到,逐条发送 INSERT 语句并不是一个可行的方法。MySQL 文档中有些值得一读的 INSERT 优化技巧。在这篇文章里,我将概述高效加载数据到 MySQL 数据库的两大技术。LOAD DATA INFILE…

android 移植游戏,Unity游戏移植到Android平台

很多时候不仅需要单纯的运行单个的unity游戏,而是需要将游戏嵌入Android代码中和android其他功能相辅生成一个APP,比如通过android界面的一个按钮来启动一个unity游戏。本文介绍一下主要的过程。1. 将可运行的unity游戏打包为Android project。在Unity界…

code vs 代码格式化排版_23行代码,教你用python实现百度翻译!(建议收藏)

前言:努力折腾的人生虽然不是符合完美生活,但它一定是个很精彩的人生!生命在于折腾,正如敲代码一样,你们说是吗?文章主要介绍了用23行python代码实现百度翻译,颇有参考性,喜欢的记得…

mete30是鸿蒙系统么,华为mete30pro什么时候能用上鸿蒙系统?

[其他]华为mete30pro什么时候能用上鸿蒙系统?8957电梯直达huafans01303113614新学乍练发表于 2021-4-21 21:43:19来自:HUAWEI Mate 30 Pro 5G最新回复 2021-4-22 12:10:10华为mete30pro什么时候能用上鸿蒙系统?能有确切的时间吗伊凡爱尔顿已臻…

python运算符中用来计算整商的是什么_零基础学python,看完这篇文章,你的python基础就差不多了...

Python基础语法1. 认识Python1.1 Python 简介Python 的创始人为吉多范罗苏姆(Guido van Rossum)。Python 的设计目标:一门简单直观的语言并与主要竞争者一样强大开源,以便任何人都可以为它做贡献代码像纯英语那样容易理解适用于短…

华为鸿蒙os系统转正,华为鸿蒙OS系统正式官宣,转正工作提上日程,明年多款终端将使用...

华为鸿蒙OS系统相信很多小伙伴都不陌生,作为国内现如今顶尖的科技企业。华为这些年的发展也是十分迅速的,而再快速的发展过程中。更多的用户对于华为的新款系统也充满了好奇,要知道一款属于国人自己的国产系统。在之前的国内手机上是几乎不存…

map型字段 mongodb_MongoDB极简教程

来源:我没有三颗心脏1.MongDB 简介MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB 的数据模式可以随着应用程序的发展…

html 如何改变图片形状,图形变换的三种方式是什么?

图形变换的三种方式1、平移平移,是指在同一平面内,将一个图形上的所有点都按照某个直线方向做相同距离的移动,这样的图形运动叫做图形的平移运动,简称平移。平移不改变图形的形状和大小。图形经过平移,对应线段相等&am…

Trie树(字典树)详细知识点及其应用

Trie,又经常叫前缀树,字典树等等。它有很多变种,如后缀树,Radix Tree/Trie,PATRICIA tree,以及bitwise版本的crit-bit tree。当然很多名字的意义其实有交叉。 定义 在计算机科学中,trie&#x…

aip格式转化为pdf_python提取pdf文档中的表格数据、svg格式转换为pdf

提取pdf文件中的表格数据原文链接https://www.analyticsvidhya.com/blog/2020/08/how-to-extract-tabular-data-from-pdf-document-using-camelot-in-python/另外还参考了这篇文章https://camelot-py.readthedocs.io/en/master/实现提取pdf文档中的表格数据需要使用camelot模块…

html验证邮箱自动,html5+JavaScript进行邮箱地址验证

html5 网页特效 邮箱地址验证body, input, textarea {font-family: "helvetica", arial, helvetica;}label {display: block;float: left;clear: left;text-align: right;width: 100px;margin-right: 10px;}p { padding: 10px; }fieldset { border: 1px solid #ccc; …

6 rethad 自定义硬盘_图文详解zabbix配置自定义监控项过程

概述今天主要介绍一下zabbix如何去配置自定义监控模板,下面一起来看看吧!一、模板1、概念模板(template):可以应用到主机上的实体(包括监控项、触发器、数据图、图表、监控分类、低级的自动发现规则)的集合。当一个模板被应用到一个主机后&am…

【HDU - 1085 】Holding Bin-Laden Captive! (母函数)

题干: We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But recently, it is reported that he hides in Hang Zhou of China! “Oh, God! How terrible! ” Don’t be so afraid, guys. Although he hides in a…