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

注解目录

第二章《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.mfbz.cn/a/126920.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JAVA基础1:Java概述

1.JAVA语言 语言:人与人交流沟通的表达方式 计算机语言:人与计算机之间进行信息交流沟通的一种特殊语言 JAVA语言是美国Sun公司在1995年推出的计算机语言 JAVA之父:詹姆斯高斯林 2.JAVA语言跨平台原理 跨平台:JAVA程序可以在…

Yolov5 + 界面PyQt5 +.exe文件部署运行

介绍 Yolov5是一种基于深度学习的目标检测算法,PyQt5是一个Python编写的GUI框架,用于创建交互式界面。在部署和运行Yolov5模型时,结合PyQt5可以方便地创建一个用户友好的界面,并将代码打包为.exe文件以供其他人使用。 下面是一个…

学者观察 | 联邦学习与区块链、大模型等新技术的融合与挑战-北京航空航天大学童咏昕

导语 当下,数据已成为经济社会发展中不可或缺的生产要素,正在发挥越来越大的价值。但是在数据使用过程中,由于隐私、合规或者无法完全信任合作方等原因,数据的拥有者并不希望彻底和他方共享数据。为解决原始数据自主可控与数据跨…

新登录接口独立版变现宝升级版知识付费小程序-多领域素材资源知识变现营销系统

源码简介: 资源入口 点击进入 源码亲测无bug,含前后端源码,非线传,修复最新登录接口 梦想贩卖机升级版,变现宝吸取了资源变现类产品的很多优点,摒弃了那些无关紧要的东西,使本产品在运营和变现…

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

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

【LeetCode:2300. 咒语和药水的成功对数 | 二分】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

“三大阶段稳定性测试”筑牢长安链信任基石

前言 随着长安链应用生态的不断丰富、面对的应用场景更加多元,稳定性测试在长安链测试流程中占到越来越重要的位置。本文将介绍长安链稳定性测试的发展历程及如何通过三大阶段稳定性测试应对不断出现的复杂的商业需求,筑牢长安链信任基石。 功能测试和…

IDEA 设置 Git 在左侧展示

File->settings->Version Control->commit 勾选 Use non-model commit interface

AI:77-基于深度学习的工业缺陷检测

🚀 本文选自专栏:人工智能领域200例教程专栏 《人工智能领域200例教程专栏》从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,通过本专栏案例和项目实践,都有参考学习意义。每篇案例都包含代码实例,详细讲解供大家学习。 ✨✨✨ 每一个案例都附带有代码,在本…

MySQL -- 视图

MySQL – 视图 文章目录 MySQL -- 视图一、基本使用二、视图规则和限制 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表,基表的数据变化也会影响到视图。 一、基本使用…

更新 | Apinto 网关 V0.15 版本发布!

该插件支持对后端服务返回的响应信息进行过滤,包括响应头部、响应体。过滤的响应体字段或响应头将会被移除,不会返回给客户端,从而避免敏感信息的泄漏。 若此时上游服务返回的响应体为: {"code":0,"data":{…

Redis-命令操作Redis

目录 一.Redis简介 二.Redis安装 2.1.Linux安装 2.2.Windows安装 三.Redis常用命令 3.1 Redis字符串 3.2 Redis哈希(Hash) 3.3 Redis列表(List) 3.4 Redis集合(Set) 好啦今天就到这里了!!希望能帮…

如何将系统盘MBR转GPT?无损教程分享!

什么是MBR和GPT? MBR和GPT是磁盘的两种分区形式:MBR(主引导记录)和GPT(GUID分区表)。 新硬盘不能直接用来保存数据。使用前应将其初始化为MBR或GPT分区形式。但是,如果您在MBR时需…

软件工程一些图的画法

软件工程一些图的画法 【一】数据库设计:ER图【1】ER图简介【2】实体之间的关系【3】ER图绘制常见问题【4】ER图转关系模式 【二】流程图【1】流程图的作用【2】流程图中使用的符号【3】三种循环的流程图画法【4】流程图的基本结构【5】流程图常用的形式 【一】数据…

CCF ChinaSoft 2023 论坛巡礼 | 云计算标准化论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

“位不配财”?程序员兼职,稳妥挣钱才是王道!

一、配不上 戏称程序员为“码农”,一年到头,像那地里的老黄牛和勤勤恳恳的老农民。 又像极了那工地上的农民工,天天搬砖,苦得嘞。 作为推动时代进步的得力干将,工作量自然是不容小觑。说程序员不加班都没人信&#x…

什么样的CRM系统更适合外贸企业?

外贸CRM系统作为外贸客户关系管理的工具,已经成为了当下外贸企业对外贸易过程中不可或缺的一环。那什么样的CRM系统更适合外贸企业?小Z向您推荐Zoho CRM。下面说说它到底有什么好处和作用。 一、搭建更高效的客户关系管理系统 外贸企业从前期推广、开发…

环境变量小结

一 常见环境变量介绍 1 PATH 到了现在,我们也知道我们轻轻敲下ls指令,其实会转为一个可执行文件在运行,也就变成了一个进程,所以ls是让文件运行,./test也是让文件运行,凭什么我们的可执行文件就要加个./(这…

【爬虫实战】用python爬今日头条热榜TOP50榜单!

一、爬取目标 今天分享一期爬虫案例,爬取的目标是:今日头条热榜的榜单数据。 打开今日头条 首页,在页面右侧会看到头条热榜,如下: 爬取以上6个关键字段,含: 热榜排名,热榜标题,热度值,热榜标…

深度学习 opencv python 公式识别(图像识别 机器视觉) 计算机竞赛

文章目录 0 前言1 课题说明2 效果展示3 具体实现4 关键代码实现5 算法综合效果6 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 基于深度学习的数学公式识别算法实现 该项目较为新颖,适合作为竞赛课题方向,学…
最新文章