当C语言执行printf()时,电脑中究竟发生了什么?

本文详细介绍了C语言中的printf函数,包括其用途、参数入栈顺序、格式控制字符及其功能,如d、c、s和f格式符的使用。同时提及了printf的复杂性,如处理宽字符和bool类型,以及SpringBeanUtils的一些注意事项。

击上方关注 “终端研发部


 
设为“星标”,和你一起掌握更多数据库知识

我们都知道,输出函数printf是C语言中一个非常重要的函数,一般用于向标准输出设备按规定格式输出信息,通过printf函数向终端输出字符,要输出的文字除了可以使用字母、数字、空格和一些数字符号以外,还可以使用一些转义字符表示特殊的含义。

举个例子:当我们用C 语言在屏幕中输出了"Hello World!"的时候,

比如我们想通过下面这段代码在屏幕上输出鱼形图案

b7280141a1db7741fd6717e2fbdf93c9.png

参数入栈顺序以及计算顺序

在C语言中,参数入栈顺序是确定的,从右往左。而参数的计算顺序却是没有规定的。也就是说,编译器可以实现从右往左计算,也可以实现从左往右计算。

但就printf这个函数而言,它的使用却不只是这么简单。

格式化字符串包含三种对象,分别为:(1)字符串常量;(2)格式控制字符串;(3)转义字符。

C语言格式字符

1、d格式符

用来输出一个有符号的十进制整数。

2、c格式符

用来输出一个字符

3、s格式符

用来输出一个字符串

4、f格式符

字符串常量原样输出,在显示中起提示作用。输出表列中给出了各个输出项,要求格式控制字符串和各输出项在数量和类型上应该一一对应。其中格式控制字符串是以 % 开头的字符串,在 % 后面跟有各种格式控制符,以说明输出数据的类型、宽度、精度等。

(1)使用 printf() 输出宽字符时,需要使用 setlocale 指定本地化信息并同时指明当前代码的编码方式。除了使用 %S,还可以使用 %ls。

c68dd9444c4d0fc87d4bc0bd2c13ad60.png

(2)printf() 输出 bool 类型无专用类型标识符,实际输出时按照整型 0 或 1 输出布尔值。

(3)%a 和 %A 是 C99 引入的格式化类型,采用十六进制 p 计数法输出浮点数。

 printf()维持了一个须要打印的变量栈。默认情况下,參数进栈的顺序是由右向左的,因此,參数进栈以后的内存模型例如以下图所看到的:

dde985f0be48bfa84654b7bdac5a2ba7.png

打印的时候,printf依照字符转换说明符规定的格式从低地址開始提取数据。直到參数打印完。

e1cf23fe07e22fb06e79fc2f72f57fa3.jpeg

回复 【idea激活】即可获得idea的激活方式

回复 【Java】获取java相关的视频教程和资料

回复 【SpringCloud】获取SpringCloud相关多的学习资料

回复 【python】获取全套0基础Python知识手册

回复 【2020】获取2020java相关面试题教程

回复 【加群】即可加入终端研发部相关的技术交流群

阅读更多

用 Spring 的 BeanUtils 前,建议你先了解这几个坑!

lazy-mock ,一个生成后端模拟数据的懒人工具

在华为鸿蒙 OS 上尝鲜,我的第一个“hello world”,起飞!

字节跳动一面:i++ 是线程安全的吗?

一条 SQL 引发的事故,同事直接被开除!!

太扎心!排查阿里云 ECS 的 CPU 居然达100%

一款vue编写的功能强大的swagger-ui,有点秀(附开源地址)

相信自己,没有做不到的,只有想不到的

在这里获得的不仅仅是技术!

d8f54a4a9efcb4a9cfa3d0e73b3046e7.png

9ee0ae09d0a9c6833e1e906eb781ddd6.gif

喜欢就给个“在看83711d4316825af31ae7e5e15f76b788.gif 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

androidstarjack

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值