嵌入式全栈开发学习笔记---C语言笔试复习大全23
目录
联合体
联合体的定义
联合体的长度
如果来判断设备的字节序?
如何把大端数据转换成小端数据?
枚举
枚举的定义
上一篇复习了结构体,这一节复习联合体和枚举。
说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。
这篇博文的目的是复习C语言,我们会陆续以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。
注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!
vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。
我们正式开始:
联合体
为什么要学习联合体?
结构体有个缺点就是比较占内存,因为我们每次使用结构体时要给里面的每个成员都开辟空间,但是有时候我们只需要用到里面的某个成员,而不是全部,我们只想为我们使用到的成员申请空间,但是其他成员又不能直接删掉,因为我们有时候还会使用到其他成员,所以怎么办呢?这个时候联合体就派上了用场。
联合体又叫共用体。是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。联合体可以带有多个成员,但是任何时候只能有一个成员带有值。联合体提供了一种使用相同的内存位置的有效方式。
联合体的定义
定义联合体需要用到union关键字。union 语句定义了一个新的数据类型,带有多个成员。
union 语句的格式如下:
union 共用体名
{
成员表列
};
联合体的长度
例如:
union test
{
int a;
int b;
char c;
};
它的总长度是4
联合体的特点:
- 联合体的所有成员共享同一块内存空间;
- 联合体大小:只为最长成员分配空间;
如果我们给a初始化为100,test.a=100;
由于内存是同一个空间,我们访问a,即是访问b,因此当我们打印b的时候,结果也是100,如果访问char c情况就有可能不一样,因为我们不知道c是在4个字节的哪一端,取决于电脑的字节序。
笔试的时候经常用联合体来判断设备的字节序。(这个我们在复习一维数组的时候就已经提到过了)
小端字节序:低字节存放在低地址,高字节存放在高地址。
大端字节序:高字节存放在低地址,低字节存放在高地址。
注意:数组无疑是:数组元素的地址是从低地址到高地址,比如a[0]存放在低地址,a[4]存放在高地址。
如果来判断设备的字节序?
示例:
假设联合体:
union test
{
char ch[2];
short val;
};
我们让val=0x0102;这个是16进制,里面有两个字节,分别为0000 0001(高字节)和0000 0010(低字节),我们由于ch和val共享一个空间,那么我们只要判断0000 0001是放在了ch[0](低地址)还是放在了ch[1](高地址)就能知道设备是小端字节序还是大端字节序了。
参考代码:
#include <stdio.h>union test
{char ch[2];//两个字节short val;//short是两个字节
};int main()
{//定义联合体变量union test t;t.val=0x0102;if(t.ch[0]==1&&t.ch[1]==2){printf("big\n");}else if(t.ch[0]==2&&t.ch[1]==1){printf("small\n");}return 0;
}
运行结果:

该设备为小端字节序,一般来说电脑或者我们使用的开发板一般都是小端字节序。
如何把大端数据转换成小端数据?
我们只需要将高字节和低字节调换位置即可
示例:
假设int num=1; 0000 0000 0000 0000 0000 0000 0000 0001,这个1属于低字节,现在要求将它挪到高字节。
提示:将低字节取出来通过位移运算移动到高字节。
参考代码:
#include <stdio.h>int main()
{int num=1;printf("%d\n", ((num & 0x000000ff)<<24)|(num &0x0000ff00<<8)|(num &0x00ff0000>>8)|(num &0xff000000>>16));return 0;}
运行结果:

用计算器计算的结果也是16777216

枚举
枚举的关键字:enum
枚举和宏定义有点类似。但是有些情况宏定义显得有点繁琐,比如给每个星期的英文缩写重新定义一个数字, 那么我们需要写:
#define MON 1
#define TUE 2
#define WED 3
......
一个星期7天,那我们重复宏定义7次,这样就显得有点繁琐了,因此我们需要用到枚举。
枚举的定义
enum weekday //这个weekday在这里可以不用也写
{
sun,mon,tue,wed,thu,fri,sat
};
虽然枚举中我们并没有给sun,mon,tue,wed,thu,fri,sat定义0,1,2,3,....但是编译器会默认sun是0,mon是1,tue是2....这样就可以申请繁琐的定义操作。
当然如果你不想要枚举默认,那么你也可以自己指定,比如
enum
{
sun,mon=11,tue,wed,thu,fri,sat
};
当我们这样讲mon定义成11时,那么后面的tue也就跟着变成12了,依次递增。
以上就是这篇内容,如想了解更多,欢迎订阅本专栏!
如有问题可评论区或者私信留言,如果想要进交流群请私信!
相关文章:
嵌入式全栈开发学习笔记---C语言笔试复习大全23
目录 联合体 联合体的定义 联合体的长度 如果来判断设备的字节序? 如何把大端数据转换成小端数据? 枚举 枚举的定义 上一篇复习了结构体,这一节复习联合体和枚举。 说明:我们学过单片机的一般都是有C语言基础的了ÿ…...
C++函数指针,键值对集合的学习
这段代码使用了 std::unordered_map 来存储 std::wstring 作为键(key),而对应的值(value)是一个 std::function<void(std::array<int, 5>, SomeClass&, int)> 类型的函数指针。这个结构使得根据字符串…...
新人攻略:避开这3大坑,让老员工主动带你飞!
进入职场的新人们,常常会感到困惑和挑战。他们可能会发现自己在与老员工的交流中遇到难题,甚至发现老员工并不愿意花费时间和精力去指导他们。这背后的原因是什么呢?又该如何改善这一现象呢?本文将从新员工的角度出发,…...
汽车液态电池隔膜的作用
标签: 汽车液态电池隔膜的作用; 聚乙烯(PE);聚丙烯(PP) 问题:汽车液态电池隔膜的作用? 汽车液态电池隔膜的作用 汽车液态电池中的隔膜是一个至关重要的组件,它在电池的性能、安全性和寿命方面起着关键作用。下面详细讲述隔膜的主要功能和作用: 1. 电化学隔离 隔…...
汽车液态电池充电时,充电时的化学反应是怎样的? 电池电量是怎么充满的?
标签: 汽车液态电池充电时的化学反应; 电池充电过程;锂电池,石墨负极 问题:汽车液态电池充电时,充电时的化学反应是怎样的? 电池电量是怎么充满的? 汽车液态电池充电时的化学反应 汽车液态电池(如锂离子电池)在充电时,通过电化学反应将电能转化为化学能并储存在电…...
Topk问题以及二叉树的三种层序遍历和基本操作
一、Topk问题 1、问题描述 TOP-K问题:即求数据结合中前K个最大的元素或者最小的元素,一般情况下数据量都比较大。 比如:专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。 2、思路 对于Top-K问题,能想到的最简单直接的…...
深度学习设计模式之桥接模式
文章目录 前言一、介绍二、详细分析1.核心组成2.实现步骤3.代码示例4.优缺点优点缺点 5.使用场景 总结 前言 桥接模式是将抽象部分与实现部分分离,使它们都可以独立的变化。 一、介绍 桥接模式是结构型设计模式,主要是将抽象部分与实现部分分离&#x…...
设计模式 17 组合模式 Composite Pattern
设计模式 17 组合模式 Composite Pattern 1.定义 组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设…...
【经典论文阅读10】MNS采样——召回双塔模型的最佳拍档
这篇发表于2020 WWW 上的会议论文,提出一种MNS方式的负样本采样方法。众所周知,MF方法难以解决冷启动问题,于是进化出双塔模型,但是以双塔模型为基础的召回模型的好坏十分依赖负样本的选取。为了解决Batch内负样本带来的选择性偏差…...
串行低功耗芯片间媒体总线(SLIMbus)介绍
文章目录 SLIMbus简介slimbus设备和设备类Manager DeviceFramer DeviceInterface DeviceGeneric Device (Function)SLIMbus组件简单的SLIMbus组件复杂的SLIMbus组件SLIMbus的DATA和CLKSLIMbus的Clock Frequencies和GearsCells, Slots, Subframes, Frames, and...
esp32-S3 使用自带的大模型,实现本地文字转语言tts
目录 CMakeLists.txt文件中: 初始化以及实际运用代码: 在partitions.csv 内存分配文件中,添加voice_data项...
Redis事务(1)
什么是事务? Redis 的事务和 MySQL 的事务概念上是类似的. 都是把⼀系列操作绑定成⼀组. 让这⼀组能够批量执行。 但是注意体会 Redis 的事务和 MySQL 事务的区别: 弱化的原⼦性: redis 没有 “回滚机制”. 只能做到这些操作 “批量执⾏”. 不能做到 “⼀个失败就…...
202206青少年软件编程(Python)等级考试试卷(四级)
第 1 题 【单选题】 有如下 Python 程序, 包含 lambda 函数, 运行该程序后, 输出的结果是? ( ) g = lambda x,y:x*yprint(g(2,3))A :2 B :3 C :6 D :8 正确答案:C 试题解析: g = lambda x, y: x*y, lambda 函数返回参数 x 和 y 的积, 因此选 C。 第 2 题 【单选…...
大作业爬取手机数据,实现手机推荐系统以及朋友圈手机论坛
1、功能简介 (1)用户注册与用户登录 (2)手机搜索、手机比拼、手机个性化推荐 (3)点击搜索的手机图片会就用户行为,轮播展示用户行为,推荐点击次数靠前的手机 (4…...
Leetcode 环形链表|| 快慢指针解法
但是我们不知道 aaa 的值,该怎么办?依然是使用双指针法。考虑构建一个指针,此指针需要有以下性质:此指针和 slow 一起向前走 a 步后,两者在入口节点重合。那么从哪里走到入口节点需要 aaa 步?答案是链表头节…...
出书,是「盖你自己的房子」你知道吗?
出书是「盖你自己的房子」 尊敬的出书盟友: 你好!我希望这封信能够激发您对出书和阅读的热情。 在当今信息爆炸的时代,每个人都有机会分享自己的故事、思想和知识。而书籍作为一种流传百年的媒体,依旧承载着无限的力量和影响力…...
深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥
系列文章目录 更新ing... MySQL操作全攻略:库、表、数据、事务全面指南深入探索MySQL SELECT查询:从基础到高级,解锁数据宝藏的密钥MySQL SELECT查询实战:练习题精选,提升你的数据库查询技能PyMySQL:连接P…...
驾校管理系统-手把手调试搭建
驾校管理系统-手把手调试搭建 驾校管理系统-手把手调试搭建...
知能行——考研数学利器
知能行使用体验全记录 首先,我先介绍一下自己,我是2018级的,2022年6月毕业,本科沈阳工业大学(双非),今年二战,专业课自动控制原理,数二英二,目标是江南大学控…...
pod 库发布脚本
repo_tag.sh 文件 #!/bin/zsh# 私有库名称 #PODNAME${PWD##*/} PODNAME"LBHorizontalCenterLayout"function obtain_git_tag {# 类似 "s.version 0.0.1"VERSION_STRINGgrep -E s.version.* ${PODNAME}.podspecTAGtr -cd "[0-9.]" <<&…...
Sentinel-3B OLCI 3 级全球分箱地球观测降分辨率(ERR)叶绿素(CHL)数据,版本 2022.0
Sentinel-3B OLCI Level-3 Global Binned Earth-observation Reduced Resolution (ERR) Chlorophyll (CHL) Data, version 2022.0 简介 叶绿素 a 数据集提供全球网格化的表层叶绿素 a 浓度(浮游植物生物量的替代指标)合成数据。CHL 支持时间序列和气候…...
从理论推导到代码实现:手把手教你用Python/Numpy写出守恒形式的NS方程求解器
从理论推导到代码实现:手把手教你用Python/Numpy写出守恒形式的NS方程求解器计算流体力学(CFD)的魅力在于它将抽象的数学方程转化为可执行的代码,让流体运动的奥秘在计算机中重现。对于已经掌握流体力学理论的中高级学习者来说&am…...
对称与负电源测试:动态直流电子负载的设计、原理与应用
1. 项目概述:对称与负电源的静态与动态直流负载在电子实验室里,测试一个电源的性能,尤其是它的动态响应能力,是件既基础又关键的事。我们常说的“直流电子负载”就是这个领域的核心工具。我之前设计并分享过一个用于正电源测试的静…...
全链路压测实战:双十一级别的流量,我是这样扛住的
作为一名在质量保障领域摸爬滚打多年的测试工程师,我深知传统的单接口压测在如今分布式架构下的无力感。当业务流量达到双十一这种脉冲式、高并发的级别时,任何一个非核心链路上的“短板”都可能引发系统性的雪崩。全链路压测不再是选择题,而…...
上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷?
更多请点击: https://intelliparadigm.com 第一章:上线前最后一道防线,DeepSeek代码审查如何帮你拦截87%的CVE类缺陷? 在软件交付生命周期末期,传统人工代码审计与通用SAST工具常因误报率高、上下文理解弱而漏检高危漏…...
从开题到定稿零焦虑:okbiye AI 论文写作,帮你把毕业季的 “大山” 变成坦途
okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT毕业论文 - Okbiye智能写作https://www.okbiye.com/ai/bylw 毕业季的深夜,宿舍台灯下的屏幕亮着刺眼的光,文档里的字数停留在三位数,而 deadline 正一天天逼近。你是…...
WebSocket实时通信架构进阶:Room、命名空间与集群部署
WebSocket实时通信架构进阶:Room、命名空间与集群部署 作者:Crown_22 | AI Agent & Hermes Agent 桌面程序开发者 前言 WebSocket已经成为实时应用的标准技术,但大多数教程只停留在"建立连接、发送消息"的基础阶段。在生产环境中,你需要处理Room管理、命名空…...
Ubuntu经常安装软件
1、垃圾清理工具stacer sudo apt updatesudo apt install stacer apt cleanapt autocleanapt autoremove 2、类似与everything的工具Fsearcch 1sudo add-apt-repository ppa:christian-boxdoerfer/fsearch-stable 2sudo apt update 3sudo apt install fsearch (注…...
Keil µVision反汇编窗口内容导出方案与调试技巧
1. 问题背景与需求解析在嵌入式开发过程中,调试环节往往占据大量时间。Keil Vision作为业界广泛使用的集成开发环境(IDE),其调试器功能强大但某些细节功能仍有提升空间。最近我在使用C251架构开发汽车电子控制单元时,就遇到了一个看似简单却影…...
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台
NBTExplorer:让Minecraft数据编辑从专业工具变成人人可用的可视化平台 【免费下载链接】NBTExplorer A graphical NBT editor for all Minecraft NBT data sources 项目地址: https://gitcode.com/gh_mirrors/nb/NBTExplorer 你是否曾经面对Minecraft世界文件…...
