振南技术干货集:C语言的一些“骚操作”及其深层理解(2)

news2024/12/23 7:17:37

注解目录

第二章《c语言的一些“操作”及其深层理解》

一、字符串的实质就是指针

(如何将 35 转为对应的十六进制字符串”0X23”?)

二 、转义符\

(打入字符串内部的“奸细”。)

三、字符串常量的连接

(字符串常量是双面胶,你知道吗?)

四、长字符串的拆分技巧

(GPS 数据帧 NMEA、Shell 命令行和 AT 指令的解析,是长串拆分的典型应用。)

五、巧取数值的各位数码

(玩多位数码管的必有操作。)

六、printf 的实质与使用技巧

(自认为很了解 printf?那你试过向 3 个 UART 打印吗?或者打印到液晶屏上?)

七、关于浮点数的传输

(浮点只是一种假象,看清它的本质。)

八、关于数据的直接操作

(如何快速计算浮点的相反数,乘以-1.0?再想想。)

九、 浮点的四舍五入与比较

(老师说浮点不能直接判等,为什么?)

十、的 出神入化的 for 循环

(for 循环很熟悉了吧?OK,振南出了几道题,来试试。)

十一、 隐藏的死循环

(我们在明处,有时死循环在暗处。)

十二、 看似多余的空循环

(没用的东西?)

十三、 独立执行体

(这个概念 C 语言里没学过?那就对了,我经常用。)

十四、 多用() 无坏处

(万物皆可加括号。)

十五、== 的反向测试

(把==错写成=,能让你调程序调到吐血。)

十六、 赋值操作的实质

(让数学教授困惑半生的 C 语言赋值操作。)

十七、 关于补码

(摊牌了,CPU 其实不会作减法。)

十八、 关于-1

(-1 就是全 F,全 F 就是-1。)

二十、字节快速位逆序

(时间与空间的相互转化--计算机中的相对论)

二十一、关于 volatile

(有些东西不可优化。)

二十二、关于变量互换

(位操作的奇妙。)

二十三、关于 sizeof

(告诉你关于 sizeof 那些少人关注的问题。)

二十四、memcpy 的效率

(小小的函数也有大大的背景)

二十五、[] 的本质

(你以为[]只是数组下标?)

二十六、# 与##( 串化与连接)

(一个不曾出现在 C 语言教材中的知识点)

字符串的实质就是指针

转义符 \


C 语言中要表达一个字节数据序列(内存中连续存储的若干个字节),我们可以使用字节数组,如 unsigned char array [ 10 ] = { 0 ,1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 }。其实字符串,本质上也是一个字节序列,但是通常情况下它所存储的字节的值均为ASCII中可打印字符的码值,如’ A ’、’‘、’| ’等。那在字符串中是否也可以出现其他的值呢? 这样,我们就可以用字符串的形式来表达一个字节序列了。很多时候,它可能比字节数组要方便一些。字符串中的转义符就是用来干这个的。请看如下程序:


这两种写法,array所指向的内存字节序列是基本一样的(后者最后还有一个0)。当然,如果我们把array传到strlen去计算长度,返回的值为0。因为它第一个字节的值为0 。但是我们仍然可以使用array [ n ]的方式去访问序列中的数据。


上面程序中的两种写法,是完成等价的。字符串中的转义符的目的是为了在本应该只能看到ASCII可打印字符的序列中,可以表达其他数值或特殊字符。如经常使用的回车换行”\r\n ”,其实质就是” \x0d\x0a ”;通常我们所说的字符串结束符 \0,其实就是0的八进制转义表达形式。


 字符串常量的连接


在研读一些开源软件的源代码时,我见到了字符串常量的一个比较另类的用法,在这里介绍给大家。

有些时候,为了让字符串常量内容层次更加清晰,就可以把一个长字符串打散成若干个短字符串,它们顺序首尾相接,在意义上与长字符串是等价的。比如 "0123456789ABCDEF" 可以分解为”0123456789 ”” ABCDEF ”,即多个字符串常量可以直接连接,够成长字符串。这种写法,在 printf 打印调试信息的时候可能会更多用到。


在 printf 的格式化串很长的时候,我们把它合理的打散,分为多行,程序就会显得更多工整。

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

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

相关文章

2023年【公路水运工程施工企业安全生产管理人员】复审考试及公路水运工程施工企业安全生产管理人员考试试题

题库来源:安全生产模拟考试一点通公众号小程序 公路水运工程施工企业安全生产管理人员复审考试根据新公路水运工程施工企业安全生产管理人员考试大纲要求,安全生产模拟考试一点通将公路水运工程施工企业安全生产管理人员模拟考试试题进行汇编&#xff0…

asp.net学生部门管理系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio

一、源码特点 asp.net 学生部门管理系统是一套完善的web设计管理系统,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为vs2010,数据库为sqlserver2008,使用c#语言 开发 asp.net学生部门管理系统1 应用技…

详解机器学习最优化算法

前言 对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题。因此,最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中,小编将对机器学习中所使用的…

Springboot通过ObjectMapper(节点树)解析JSON

1、ObjectMapper通过节点树的方式解析JSON字符串 1.1、通过节点直接获取属性值 1.1.1、测试代码 node.get("order_id"):直接获取JSON中属性对应的值 Test public void parseJson() throws Exception{//创建json字符串,模拟从外界接收的订…

2023年【危险化学品生产单位安全生产管理人员】最新解析及危险化学品生产单位安全生产管理人员理论考试

题库来源:安全生产模拟考试一点通公众号小程序 危险化学品生产单位安全生产管理人员最新解析考前必练!安全生产模拟考试一点通每个月更新危险化学品生产单位安全生产管理人员理论考试题目及答案!多做几遍,其实通过危险化学品生产…

halcon分割粘连字符

下面的算子都可以分割: 1.*(推荐使用这个)在垂直范围较小的位置水平划分区域 partition_dynamic(circleRegion,parRegion,76,50)2.*将一个区域划分为大小大致相等的矩形。(这个方法适合宽度相等,很规则的排列的字符串…

韩语图片文字如何转为纯文本?

如何将上图为韩语的图片转为文本文件?这个需要用到OCR程序,操作方法如下: 一、打开金鸣识别网站。 二、点击“点击添加图片/PDF”,将待识别的图片添加到列表。 三、识别模块点选“通用文字”,输出格式选择“纯文本输…

Python 函数定义详解(More on Defining Functions)- 默认参数/位置参数/关键字参数

1.函数的定义和调用方法 1.1函数定义方法 """def 关键字用来定义一个函数。function_name 是函数名,应遵循命名规范。parameter1, parameter2, ... 是函数的参数列表,可以是任意数量和类型的参数。函数体是用缩进(通常为4个…

线上SQL超时场景分析-MySQL超时之间隙锁 | 京东物流技术团队

前言 之前遇到过一个由MySQL间隙锁引发线上sql执行超时的场景,记录一下。 背景说明 分布式事务消息表:业务上使用消息表的方式,依赖本地事务,实现了一套分布式事务方案 消息表名:mq_messages 数据量:3…

Facebook广告被暂停是什么原因?Facebook广告账号被封怎么办?

许多做海外广告投放的小伙伴经常遇到一个难题,那就是投放的Facebook广告被拒或 Facebook 广告帐户被关闭赞停的经历,随之而来的更可能是广告账户被封,导致资金的损失。本文将从我自身经验,为大家分享,Facebook广告被暂…

kafka 集群企业部署最佳实践

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…

Git安装配置保姆级教程和Git创建仓库的基本原理和常用命令

目录 前言 一、Git简介 1.Git 与 SVN 区别点 2.Git的介绍 3.Git 工作流程 4.Git 工作区、暂存区和版本库 二、Git安装配置 1.Linux 平台上安装 2.Windows 平台上安装 三、Git 创建仓库和下载 1、首先需要注册一个gitee账号 2.git初始化并提交到远程仓库 3.另一用户…

chrome 的vue3的开发者devtool不起作用

问题: 刚刚vue2升级到vue3,旧的devtool识别不了vue3数据。 原因: devtool版本过低。升级到最新。 解决: 去github下载vuetool项目代码: GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging…

Linux学习笔记之五(父子进程、孤儿进程、僵尸进程、守护进程)

Linux 1、进程1.1、进程的六种状态1.2、创建子进程1.3、添加子进程任务1.4、孤儿进程、僵尸进程、守护进程1.4.1、避免僵尸进程1.4.2、创建守护进程1.4.3、杀死守护进程 1.5、综合练习 1、进程 进程可以简单的理解为一个正在执行的程序,它是计算机系统中拥有资源和…

django建站过程(4)创建文档显示页面

django建站过程(4)创建文档显示页面 创建文档显示页面项目主文件夹schoolapps中的文件urls.py在APP“baseapps”中创建url.py文件编写视图模板继承bootstrap创建head.html创建doclist.html创建docdetail.html 使用 markdown 编辑器安装模块Model 模型的d…

Hello World背后的逻辑

一门语言的开发入门,总是抬手就能整出一个「Hello World Demo」。比如下面这样: 显然,熟悉 iOS 开发的同学都知道,上面这个来自 Objective-C。 今天,我们就从这熟悉的代码入手,来一起研究研究「Hello Worl…

泄露35TB数据,医疗巨头Henry Schein遭受黑猫勒索组织攻击

近日,据Bleeping Computer 网站消息,BlackCat(黑猫)勒索软件团伙将医疗保健巨头Henry Schein 添加到了其暗网泄露网站,并声称其破坏了该公司的网络,窃取了35 TB的敏感文件,这些文件包括了Henry …

BES 在大规模向量数据库场景的探索和实践

导读 本文整理自 2023 年 9 月 5 日 QCon 全球软件开发大会 2023 北京站 —— 向量数据库分论坛的同名主题演讲《BES 在大规模向量数据库场景的探索和实践》。 全文5989字,预计阅读时间15分钟。 向量数据库是一种专门用于存储和查询向量数据的数据库系统。通过 Emb…

verdi如何打开时可以加载配置比如字体

打开tcl使能 找到配置字体的命令 其实其他有需要的文件配置都可以在这里找到对应的指令 存储文件 新建verdi001.tcl文件 输入想要调整的字体以及大小 verdiSetFont -font "Bitstream Vera Sans" -size "18" verdiSetFont -monoFont "Courier&q…

【 云原生 | K8S 】kubectl 详解

目录 1 kubectl 2 基本信息查看 2.1 查看 master 节点状态 2.2 查看命名空间 2.3 查看default命名空间的所有资源 2.4 创建命名空间app 2.5 删除命名空间app 2.6 在命名空间kube-public 创建副本控制器(deployment)来启动Pod(nginx-wl…