这段时间很忙,更新的晚了,见谅。当然同样有今天我们的主角十分复杂,之前介绍了这个手记并非是面对新手的,而是我的复习手记。所以我们会讲头文件,或许有错误,如果有大手子看到,希望能够提出我的错误。
一楼链接,printf()详解之终极无惑, 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。
关于所有的转换字符如下图。
具体的转换字符的对应关系,图上都十分清楚了,不会做更复杂的解释。只需要知道每一个对应的是什么就好了。
强调两个地方。
回答c语言入门的问题时经常遇见,printf函数怎么输入%,嗯,输入%的方法是printf("%%");这样就会输出一个%。具体原因就是printf函数是在一点一点读取你所写的内容,所以你写了一个%,它就自己把这个认作转换字符的开头了,所以我们把输出%也创建一个转化说明,这个转换字符就是%%。
关于这个的一个链接printf函数源码实现新手不需要看,想要了解的看看
前面讲了char型数据,可以尝试一下用%d和%c分别输出。你会发现%d输出了其ASCII码,而%c输出了其实际字符。
然后说一下转换字符的修饰。实际上完整的转换说明的语法形式为:%[域宽说明]转换字符,所以说我们的printf函数可以为我们提供更加细节的打印。上图,自己拍的。
举几个例子,其他自己试。
#include <stdio.h>
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函数的一个研究也令我清醒了一些,目前自己的知识储备以及时间安排不宜与对此进行过多的研究,合理安排自己的时间和学习计划才是最正确的方法。
贴一张图:来自于知乎,希望在计算机领域走的比较元的铜须可以看看。
共同学习,写下你的评论
评论加载中...
作者其他优质文章