自定义类型:结构体,联合体,枚举

Keil环境下单片机串口通信实战:如何用printf发送中文(附完整代码) 本文详细解析了在Keil开发环境下,单片机通过串口通信发送中文信息时产生乱码的根本原因及解决方案。核心在于理解并统一编码(如GB2312或UTF-8),并正确重定向printf函数。文章提供了针对STC89C52和STM32F103的完整代码示例,涵盖工程配置、编码设置、调试技巧,帮助开发者实现稳定可靠的中文串口输出。 阅读详情

在之前,我们就对结构体有过了解

结构成员访问操作符-CSDN博客

接下来,我们进行更加深入的了解。

目录

1.结构体声明

2.结构体变量的创建和初始化

3.匿名结构体类型

4.结构的自引用

5.结构体的内存对齐

首先,结构是一些值的集合

一.结构体

1.结构体声明

struct tag
{
	member - list;
}variable-list;

 描述一个学生的情况

struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
};

2.结构体变量的创建和初始化

(初始化分为按照结构体成员的顺序初始化和按照指定的顺序初始化)

struct Stu
{
	char name[20];//名字
	int age;//年龄
	char sex[5];//性别
	char id[20];//学号
};

int main()
{
	struct Stu s = { "zhangsan", 20,"nan", "2320061125" };
	printf("name: %s\n", s.name);
	printf("age: %d\n", s.age);
	printf("sex: %s\n", s.sex);
	printf("id: %s\n", s.id);


	struct Stu s1 = { .age = 18, .name="lili", .id="2320061125", .sex="女"};
	printf("name: %s\n", s1.name);
	printf("age: %d\n", s1.age);
	printf("sex: %s\n", s1.sex);
	printf("id: %s\n", s1.id);

	return 0;

3.匿名结构体类型

(只能使用一次)

struct
{
	int a;
	char b;
	float c;
}x;

struct
{
	int a;
	char b;
	float c;
}a[20], * p;

这个不合理 

4.结构的自引用

struct Node
{
	int data;
	struct Node *next;
};

5.结构体的内存对齐

对齐规则

(1)结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处

(2)其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处

对齐数=编译器默认的一个对齐数与该成员变量大小的较小值

VS中默认值是8

Linux中gcc没有默认对齐数,对齐数是成员自身的大小

(3)结构体总大小为最大对齐数(结构体中每个成员变量都有一个对齐数,所有对齐数中最大的)整数倍

(4)如果嵌套了结构体的情况,嵌套的结构体成员对齐到自己的成员中最大的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体中成员的对齐数)的整数倍

struct S1
{
	char c1;
	char c2;
	int i;
};

printf("%d\n", sizeof(struct S1));
c1
c2
i
i
i
i
struct S1
{
	char c1;
	int i;
	char c2;
};

printf("%d\n", sizeof(struct S1));
c1
i
i
i
i
c2

 二.联合体(共用体)

与结构体不同的是,编译器只为最大的成员分配足够的内存空间。联合体的特点是所有成员共用同一块的内存空间。

1.特点

联合体成员共用同一块空间,联合变量的大小,至少是最大成员的大小,当最大成员不是最大对齐数的整数倍时,要对齐到最大对齐数的整数倍

2.联合体大小的计算

union Un1
{
	char c[5];
	int i;
};

union Un2
{
	short c[7];
	int i;
};

int main()
{
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	return 0;
}

 Un1中,c是7,i是4,最大成员是7,但是不是最大对齐数int(4)的倍数,所以大小应为8

Un2中,c是14,不是4的倍数,所以大小是16

三.枚举(一一列举)

枚举的关键字:enum

enum Color
{
	RED;
    GREEN;
	BLUE;
};

enum Day
{
	Mon;
    Tues;
    Wed;
    Thur;
    Fri;
    Sat;
    Sun;
};

为什么使用枚举

(1)增加代码的可读性和可维护性

(2)和#define比较更加严谨

(3)便于调试,预处理阶段会删除#definr符号

(4)使用方便,一次定义多个常量

(5)枚举声明在函数内,只能在函数内使用

线性自抗扰控制(LADRC)系统算法框图 NLADRC自抗扰控制从Simulink仿真到PLC控制实现_自抗扰控制器 simulink仿真-CSDN博客本文介绍了如何将ADRC自抗扰控制算法从Simulink仿真应用到PLC控制中,包括Simulink框图、TD微分器模型、MATLAB函数的使用、SCL控制代码,以及非线性状态误差反馈控制率的实现。提供了详细的MATLAB仿真步骤和PLC源代码链接。ADRC自抗扰控制算法(含梯形图完整源代码和算法公式)_adrc算法-CSDN博客。 阅读详情

相关推荐

卸载重装Ubuntu22.04双系统

先说一下写此篇文章的背景吧,我在Windows下配置了三个cornerNet深度学习环境分别是cuda10.3(显卡版本太高不支持),cuda11.3(配置后偶然看到一篇说这个版本win下只能用CPU跑),最后是cuda11.1终究还是没能跑通代码,因为它的代码是在Liunx系统写的,就想着装个Ubuntu试试看,在网上看说一般软件不要装太高版本,我就下载了470版的显卡驱动,跟着步骤升级了系统内核,结果第二天开机Ubuntu就崩了,开机黑屏左上角只有一道横杠显示,只能按ctrl+shift+f5进入命令窗

编程小白的博客 8079

深入探索 C 语言中的自定义类型:结构体、联合体与枚举

结构体、联合体和枚举在 C 语言中各自扮演着重要角色。结构体擅长整合不同类型的数据,联合体能够有效节省内存,枚举则可以清晰地列举取值。而结构体实现的位段在特定场景下发挥着独特作用,尽管存在跨平台等问题,但合理使用能带来显著的性能提升。熟练掌握这些自定义类型及其特性,将使开发者在 C 语言编程的道路上如虎添翼,编写出更高效、更优质的代码。希望通过本文的介绍,大家能对它们有更深入的理解,并在实际编程中灵活运用。

2403_87794049的博客 890

python采集keep运动数据

我国2009年确立“全民健身日”;2012年,“广泛开展全民健身运动”写入十八大报告;到2014年上升为国家战略,全民健身的分量越来越重。推动全民健身和全民健康深度融合,通过全民健身实现全民健康。 全民健身运动在我国越来越普及,每天清晨和傍晚时分,城市的广场上、公园里,到处是运动健身的人们,跑步、打球、跳舞、游泳、打太极拳等运动项目十分丰富,人们在运动中获得越来越多的幸福感。 随之诞生出了很多运动app,例如keep,咪咕,微信等,大家可以通过app随时记录自己的运动数据,特别是对于很多的减肥人群来说,通过

Z_suger7的博客 5644

C语言——自定义类型:结构体、联合体、枚举

本文详解C语言结构体、联合体、枚举三大自定义类型,从基础语法、底层原理到实战应用逐一拆解,结合代码剖析内存对齐、内存共享等核心特性与高频考点,明晰三者在数据封装、内存优化、代码规范中的作用,为C语言进阶和底层开发夯实基础。

m0_68447088的博客 835

自相关互相关卷积的_相关性(Correlation)和相干性(Coherence)

1. 概念相关性(Correlation,或称相关系数或关联系数),显示两相关变量之间线性关系的强度和方向。在统计学中,相关的意义是用来衡量两个变量相对于其相互独立的距离。相干性(Coherence),与相关性计算得到的信息非常相似,都是衡量两个变量之间的相关程度,只是相干性多用于频域计算,可以在基于频率上给出更多的信息,而相关性多用于普通的数组计算和时域信号。这里其实应该有三个概念,c...

weixin_39963053的博客 3327

硬件工程师入门进阶,一文搞懂,看这篇就对了

每家公司的datasheet都有严格的规范,及独特的风格,有时候还会穿插一些原理性的介绍,比如ADI公司的一些ADC/DAC器件资料里面,还会包含AD/DA转换的原理性讲解内容,Datasheet既可以是我们设计上的好帮手,也是学习的好资料。在出货量大的产品中,尽量减少物料种类,比如开头说的,1%的电阻不得不用,那么5%的替换成1%的,物料种类就减少一种,量就大了,能不能争取更优的价格呢?如果说前面学的是内功,那这一关,是招式、是工具的使用,原理图和PCB设计都有对应的工具,教程也很多,且比较容易上手。

一路带飞的博客 5万+

自定义类型:结构体,联合体和枚举

本文系统讲解了C语言中的三大自定义类型:结构体、联合体和枚举。结构体部分详细介绍了声明方式、变量创建与初始化、自引用规则、内存对齐机制(包括对齐规则和修改默认对齐数的方法)以及结构体传参的最佳实践。联合体部分阐述了其声明特点、内存共享特性、大小计算规则以及实际应用场景。枚举部分则说明了声明语法、使用方法,并对比#define分析了枚举在可读性、类型检查和调试方面的优势。全文通过丰富代码示例,深入浅出地解析了这些自定义类型的核心概念和使用技巧,特别强调了结构体内存对齐、位段实现等关键知识点,为C语言开发者提供

2502_93847333的博客 364

SAP-ABAP:SAP基础数据校验工具开发系列博客(共5篇) 第一篇:需求梳理与架构设计:从零搭建SAP主数据校验能力底座

摘要: 本系列博客介绍SAP主数据校验工具的开发和设计,旨在解决物料、供应商、客户等主数据录入不规范、关联缺失和合规性问题。第一篇聚焦需求梳理与架构设计,提出分层技术架构(展示层、业务逻辑层、数据访问层),支持实时校验和批量校验两种模式,并详细说明规则引擎设计、SAP系统对接方案及权限管控逻辑。后续篇章将深入规则引擎实现、接口对接、结果可视化和性能优化,帮助构建集中式、可配置的主数据校验能力,提升SAP数据质量。

baidu_35680696的博客 325

自定义类型:结构体、联合体、枚举

本文详细介绍了C语言中结构体、联合体和枚举类型的使用及其相关特性。结构体部分包括结构体的声明、变量创建与初始化、自引用、内存对齐规则及其原因,以及结构体传参和位段的实现。联合体部分探讨了联合体的声明、特点、大小计算及其应用场景,如判断大小端字节序。枚举类型部分则介绍了枚举的声明、优点及其在实际编程中的应用,如增加代码可读性和维护性。通过具体代码示例,展示了这些数据类型在实际编程中的灵活运用,帮助读者深入理解其原理和使用方法。

2302_80761497的博客 1117

42、InfiniBand技术详解:QP状态机、操作及错误处理

本文深入解析InfiniBand技术中的核心组件QP(Queue Pair)状态机、工作请求处理机制、支持的操作类型及错误处理策略。详细介绍了QP的创建与状态转换流程,包括INIT、RTR、RTS等关键状态,并提供了状态修改的代码示例。文章还探讨了工作请求的发布、资源使用限制、围栏机制以及重试和RNR流程,帮助开发者理解通信可靠性保障机制。此外,涵盖了多播组的应用场景与API使用方法,并对比了用户空间与内核级RDMA API的调用差异,最后给出了实践建议和常见问题解答,为构建高性能分布式系统提供技术指导。

oauth7security的博客 126

华为OD机试真题 新系统2026-04-15 Python&JS 实现【失灵的键盘】

有一个键盘有2个按键失灵了,按下这些键时会连续输出其他键对应的字符两次。具体如下: 1. 按下j键一次,屏幕上显示uu(两个连续的u);  按下b键一次,屏幕上显示t(两个连续的t) 2. u键和t键是好的,按下u键一次时,屏幕只会显示一次u(正常按键);按下t键一次时,屏幕只会显示一次t(正常按键) 3. 假定屏幕上连续显示两个t一定是按了一次b键,而不是两次t键;假定按键t之后不会紧接着按键b,即tttt转义为两个b,而不可能是tb

MISAYAONE的博客 503

【C语言】C 语言自定义类型:结构体、联合体与枚举

本文系统介绍了C语言中三种核心自定义数据类型:结构体、联合体和枚举。结构体部分详细解析了声明方式、内存对齐规则(含示例计算)、成员访问操作符和传参优化;联合体重点说明其内存共享特性及大小端检测应用;枚举则对比了与#define的优势。文章特别强调内存对齐的计算方法和位段的跨平台问题,并指出这些类型在系统编程中的关键作用,建议通过调试工具观察内存布局以加深理解。

2501_92613722的博客 1029

【华为OD技术面试真题 - 技术面】- 测试面试题(1)

专栏:华为OD面试真题精选 目录: 2024华为OD面试手撕代码真题目录以及八股文真题目录黑盒测试:白盒测试:基本功能验证:边界条件测试:空白输入测试:特殊字符和格式测试:响应时间测试:压力测试:针对在不同系统和设备上测试聊天窗口功能,以及网络正常的前置条件,我们可以增加以下测试用例:系统和设备:PC端测试:移动端测试:功能验证:前置条件:网络性能影响测试:Postman:SoapUI:JMeter:Rest-Assured:Tricentis Tosca:ReadyAPI:CI/CD工具集成:测试管理工

算法大师! 3682

自定义类型:结构体,联合体,枚举

结构体可以说是各种不同类型变量的集合。

2502_91320230的博客 1012

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

C语言基本语法-自定义类型:结构体&联合体&枚举

C语言中的自定义类型主要包括结构体、联合和枚举。结构体允许将不同类型的数据组合成一个整体,通过成员变量访问数据,并涉及内存对齐规则以提高访问效率。联合体所有成员共享同一内存空间,适用于节省内存的场景。枚举则用于定义一组命名的整型常量。这些自定义类型为C语言提供了更灵活的数据组织方式,能够有效处理复杂数据结构,同时兼顾内存使用效率和程序可读性。结构体传参通常采用指针方式以避免性能损耗,而位段则可用于网络协议等需要精确控制内存占用的场景。

m0_74068144的博客 1262

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

自定义类型:结构体 共用体(联合体) 枚举

该类型是不被允许的 因为结构体中有成员int类型的变量 当使用结构体自引用的时候 无法确定结构体的大小 它会无限的变大 所以在定义一个链表的节点的时候我们可以使用结构体指针的形式来创建节点 这样结构体的大小就是可以确定的 因为在不同的编译器底下 指针的大小是确定的。联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合 ⾄少得有能⼒保存最⼤的那个成员)。一般来说联合体的大小就是最大成员的大小 当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍。

2302_79210199的博客 396

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

教你学会自定义类型:结构体、枚举、联合体

系列文章目录 文章目录系列文章目录前言一、结构体是什么1.结构体的定义:2.结构体的实现:3.结构体的内存对齐:4.结构体的位段:二、枚举是什么1.枚举的定义:2.枚举的使用:三、联合体是什么1.联合体的定义:2.联合体的特点:2.联合体的使用:2.联合体大小的计算:四、总结 前言 自定义类型包括结构体、枚举、联合体,这里教会你怎么使用! 一、结构体是什么 结构是一些值得集合,这些值统称为成员变量,结构的每个成员可以是不同类型的变量。 1.结构体的定义: struct tag{ memlist//成

森明帮大于黑虎帮的博客 4620

C语言之自定义类型:结构体、联合体和枚举

本篇文章对C语言中的结构体、联合体和枚举类型进行了全面的解释,包含类型声明、变量创建和内存对齐等内容

Eristic0618的博客 1251

C语言自定义类型通关指南:结构体、联合体与枚举

本文深入解析C语言中三种自定义数据类型:结构体、联合体和枚举。结构体用于组合不同类型数据,重点讲解了内存对齐机制及其优化技巧;联合体实现内存共享,适用于节省空间和底层数据操作;枚举则用于定义命名常量,提升代码可读性。文章通过实例代码和内存布局分析,帮助读者掌握这些类型的核心特性和适用场景,为C语言底层开发打下坚实基础。

有时work,经常BUG,总是DeBug 400

C进阶:自定义类型:结构体、枚举、联合体

一篇搞懂结构体、枚举、联合体特殊自定义类型,带你揭开C自定义类型的面纱

比昨天强一点就好的博客 3786

【初识C语言】自定义类型全解析:结构体、联合体、枚举

本文是C语言自定义类型系列文章,涵盖结构体、枚举和联合体的详细讲解。文章首先介绍了结构体的声明、变量创建与初始化方法,包括匿名结构体和结构体自引用技巧。然后讲解了结构体内存对齐规则,通过示例分析如何优化结构体空间。枚举部分说明了定义和使用场景,联合体部分则重点讲解其共享内存特性及大小计算。文章配有丰富代码示例和内存示意图,适合C语言初学者系统学习自定义数据类型的使用与底层原理。

2301_82161965的博客 646

C语言从入门到实战——自定义类型:结构体,联合体和枚举

结构体(struct):结构体是一种自定义的数据类型,它可以将不同类型的数据组合在一起。结构体的作用是提高代码的可读性和模块化,使得代码更加清晰和易于维护。使用场景包括:存储多个相关联的数据,如学生信息、员工信息等。联合体(union):联合体与结构体类似,但它的所有成员共享同一块内存空间。联合体的作用是在相同的内存空间中存储不同类型的数据,节省内存空间。使用场景包括:需要在不同类型之间进行切换的场景,如操作系统中的进程控制块(PCB)。枚举(enum)

2203_75422717的博客 1628

C语言:自定义类型 - 结构体 & 联合体 & 枚举

讲解C语言的自定义类型,包括结构体,联合体,枚举

博客网站 https://async-area.com 1714

详解自定义类型:结构体、枚举、联合体

详解结构体、枚举、联合体

Ljiyu0506的博客 395

自定义类型:结构体,位段,枚举,联合体

结构体、位段、枚举、联合体。

小小小智_x0__0x_的博客 2804

自定义类型:结构体,枚举,联合体

自定义类型

m0_59952648的博客 125
上一篇: 打印菱形和金字塔类型(总结)
下一篇: 二分查找和冒泡排序和数组练习(多个字符从两端移动,向中间汇集)
无聊的框框
博客等级 码龄3年 526粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值