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

【自定义类型】-结构体,枚举,联合 关于结构体,枚举,联合体的使用 阅读详情

目录

1.结构体进阶

计算结构体大小

计算结构体大小的示例(以下都是在vs编译器)

位段

位段的声明和结构是类似的,有俩个不同

位段的内存分配

枚举

枚举的使用

联合

联合体大小的计算

联合体大小的计算例子


1.结构体进阶

结构体关键字是struct

struct s2
{
	int num;
	int arr[13];
	char a;
	short d;
}

上面就是一个结构体,上面struct后面的名字s2这可以自己定

结构体成员的类型

结构体成员可以是标量,数组,指针,甚至是其他结构体

计算结构体大小

首先的掌握结构体对齐原则

1.第一个成员在与结构体变量偏移量为0的地址处

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

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

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

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

vs编译器 默认的对齐数是——8

Linux环境没有默认对齐数的

没有对齐数的时候,自身的大小就是对齐数

计算结构体大小的示例(以下都是在vs编译器)

struct d
{
	int s;
	char as;
	int num;
};

这个结构体的大小为12。(如果想明白下面的为什么一定要看明白上面的4条规则)

为什么:首先第一个是int型的对齐数是4,vs默认是8,所以第一个对齐数是4,从0偏移量开始到3,下一个是char型的对齐数是1,vs默认是8,所以对齐数是1,此时偏移量是4,是1的倍数,所以就放在4,再下一个是int型的对齐数是4,vs默认是8,所以对齐数是4,但是现在偏移量是5,不是4的倍数,所以要到8偏移量开始,中间的5,6,7,都直接浪费了,4个,最后到了11偏移量,大小为12,最大对齐数是4,12是4的倍数所以最后的大小就是12。

---------------------------------------------------------------------------------------------------------------------------------

位段

位段的声明和结构是类似的,有俩个不同

1.位段的成员必须是int,unsigned int,signed int

2.位段的成员名后边有一个冒号和一个数字

位段的内存分配

1.位段的空间是按照需要以4个字节(int)或者一个字节(char)的方式来开辟的

2.位段涉及很多不确定因素,位段是不跨平台的,注意可移植的程序应该避免使用位段

struct d
{
	int _a : 2;//a这个成员只占2个bit位
	int _b : 5;//b这个成员只占5个bit位
	int _c : 10;
	int _d : 30;
};//8

位段是不会对齐的因为位段是为了节省空间

---------------------------------------------------------------------------------------------------------------------------------

枚举

枚举的优点

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

2.和#define定义的标示符比较枚举有类型检查,更加严谨

3.防止了命名污染(封装)

4.便于调试

5.使用方便,一次可以定义多个常量

枚举的使用

enum color//颜色
{
	RED = 1;
   CREEN = 2;
   BULE = 4;
};

就像这样同时可以定义多个变量,具体使用请自己探索

---------------------------------------------------------------------------------------------------------------------------------

联合

联合的成员是共用同一块空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存那个成员)

联合体大小的计算

1.联合大小至少是最大成员的大小

2.当最大成员大小不最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍

联合体大小的计算例子

union as
{
	char arr[10];
	int a;
};

这个联合体大小是12

为什么:首先第一个是一个char型数组大小是10,从0开始,到9偏移量,这里第二个是int型大小是4但是并不是从10偏移量,而是又从0开始,到3偏移量,总大小是10,但是还没有结束,因为这里的最大对齐量是4,而10不是4的倍数,所以扩大至12,最后大小就为12。

【Unity大规模RTS/攻城战框架】Large Scale Combat System - RTS Sieges深度解析 本文介绍了Unity专业级大规模RTS战斗框架Large Scale Combat System(LSCS)。该系统通过Job System+Burst技术解决了万人级单位的性能问题,提供完整的RTS操作体系、动态阵型系统、战术AI和攻城战功能。其亮点包括可破坏城门、行走城墙、战术AI配置系统,支持URP渲染管线,适用于Total War风格的大规模兵团对战项目。LSCS不仅提供核心战斗系统,还包含UI、小地图等配套模块,是Unity中少有的专业级RTS解决方案,特别适合需要深度战术玩法和大规模战斗的开发者 阅读详情

相关推荐

Unity AssetBundle解包实战指南:从工具使用到编程解析

在游戏开发与资源管理中,资源打包与加载是核心技术环节。AssetBundle作为Unity引擎官方推荐的资源分发方案,其本质是一个包含头部信息、目录表、数据区及依赖关系的结构化文件系统,通过序列化机制将游戏资源转换为二进制格式。理解AssetBundle的机制对于实现高效的热更新、减少资源冗余、优化加载性能具有重要价值,广泛应用于游戏开发、竞品分析、技术研究等场景。本文聚焦AssetBundle解包这一实践需求,系统介绍如何利用AssetStudio、UABE等主流工具进行资源提取与可视化分析,并深入探讨通

weixin_28192383的博客 347

python结构体_python struct 结构体

import struct有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体.struct模块中最重要的三个函数是pack(), unpack(), calcsize()pack(fmt, v1, v2, ...) 按照给定的格式(fmt),把数据封装成字符串(实际上...

weixin_39842937的博客 4177

分享通达信破解交易接口的使用!

那其实通达信破解交易接口的使用方法比较复杂,这里以MA均线指标为例子,只要理解了这些操作步骤,就可以很容易地使用其他指标包括自己编写的指标来进行交易。委托结果(包含委托编号), 需要分配 1024*1024 字节的空间。委托结果数组, 每项结果需要分配 1024*1024 字节的空间。0: 买入, 1: 卖出, 2: 融资买入, 3: 融券卖出,4: (市价委托)上海五档即成剩撤, 深圳五档即成剩撤。4: 买券还券, 5: 卖券还款, 6: 现券还券。0: 上海限价委托, 深圳限价委托。

1841085904的博客 2359

C中结构体大小的计算

最近研究了一下c语言中结构体大小的计算,根据自己的理解以及参考网上的资料, 想做一点总结。    先介绍一个相关的概念——偏移量。偏移量指的是结构体变量中成员的地址和结构体 变量地址的差。结构体大小等于最后一个成员的偏移量加上最后一个成员的大小。 由于存储变量时地址对齐的要求,编译器在编译程序时会遵循两条原则: 一、结构体变量中成员的偏移量必须是成员大小的整数倍(0被

4878

程序化广告行业(23/89):深度剖析广告效果评估指标

大家好,我一直希望能和大家一起在技术领域不断探索、共同进步。在之前的文章中,我们了解了程序化广告中腾讯的业务布局和广告效果评估的基础概念,今天让我们进一步深入剖析广告效果评估的各项指标,这对理解程序化广告的运作机制至关重要

yyy173611的博客 4864

SAP Event Mesh 简介

Get Started with Messaging for Decoupled Communication Step 1: What is the SAP Event Mesh service? SAP Event Mesh 是一种完全托管的服务,用于连接应用程序、服务和系统,以便它们可以通过消息和事件相互交互。 它通过引入中央消息代理取代了传统的点对点通信。 虽然点对点通信适用于在有限数量的发送方和接收方之间共享数据,但可扩展性很快就会成为一个问题。 SAP Event Mesh 解决了这个问题,并确保

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1243

python struct (tcy)

1.1.用途 执行Python值和表示为bytes对象C结构之间转换,将Python基本类型转换成byte. 用于处理文件或网络中的二进制数据以及其他来源; 1.2.说明: python中b'str'表示字节,字节数组=二进制str C语言用struct、union处理字节,以及字节和int,float的转换 1.3.注意: 处理与平台无关数据格式或省略隐式填.

tcy-阿春 1042

ABAP面试题系列:写一组会出现死锁(Deadlock)的ABAP程序

我们在计算机操作系统这门专业课上,学过死锁(Deadlock)的概念:两个或两个以上的进程(或线程)在执行过程中,由于竞争资源而造成的一种阻塞的现象,称为死锁。若无外力干预,这些处于死锁状态的进程将永远处于互相等待的阻塞状态中。 正好我儿子走到我电脑前看到文章标题,好奇地问我什么是死锁。我解释道,“假设你和白妹妹(他的玩伴)手上都有一张奥特曼白金卡,你特别想要白妹妹手上那张白金卡,白妹妹也特别想...

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1476

计算结构体的大小

计算结构体的大小

akemanaaa的博客 261

C#上位机实战:PLC与检测设备无缝对接,构建产品质量实时判定系统

本文分享了基于C#开发的汽车零部件质量检测系统实现经验。系统采用三层架构:设备层(PLC/视觉相机/三坐标)、通信层(OPC UA/SDK/串口)和应用层(数据采集/判定/存储)。重点解决了三大技术难点:1)通过OPC UA订阅模式将PLC通信延迟从500ms降至50ms;2)反编译厂商Demo破解视觉SDK对接难题;3)采用时间戳+产品ID实现多设备数据同步。系统上线后质检人员减少67%,误判率降至0.5%,数据追溯效率显著提升。文章强调工业场景下稳定性优先于技术复杂度,实用经验值得借鉴。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 799

量产导入 | 产品可靠性测试标准完整大集合(JEDEC/IEC/SAE…)

产品可靠性测试是产品质量保证中的重要一环, 包含有Pre-con, aging(寿命)和ESD(静电)等, 下面就收集了权威标准JEDEC全系列, 请参照如下 同时也附上其它的可靠性标准供大家参考及交叉理解, 可能侧重点不同, 大家可以参考下。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1663

计算结构体大小(32位系统)

计算结构体大小,32位系统下

A_lid的博客 1322

红米k60 修复“NV损坏” 去除主板校验电阻步骤解析与图示

红米k60 基带代码:mondrian。搭载‌高通骁龙8+ Gen1处理器.国外版本称:POCO F5 Pro适用于以下型号的小米机型:23013RK75C, 23013PC75G。 💝💝💝通过博文了解 1💝💝💝-----此机型修复NV损坏硬件类操作主板图示 2💝💝💝-----了解设备出现NV损坏的底层逻辑 3💝💝💝 ------具体修改步骤

小马哥的专栏 393

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

内置类型自定义类型内置类型有:内置类型是C语言本身就具有的类型,可以直接拿来使用,除了这些类型之外C语言还有自定义类型,自定义类型是自己所创造的一种类型。自定义类型有:结构体、枚举、联合体,数组。有了类型就可以创建变量,即有了结构体类型就可以创建结构体变量。struct Point//锁定点{int x;//结构体成员x:横坐标int y;//结构体成员y:纵坐标}p1;//定义结构体变量p1//这里声明类型的同时定义了结构体变量p1。

m0_60624580的博客 927

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

联合也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。//1int i;//4int main()按道理应该有5个字节但才占4个字节因为它是联合体 取最大的一个类型的字节。

chaodddddd的博客 504

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

【进阶C语言】自定义类型:结构体,枚举,联合

【进阶C语言】自定义类型:结构体,枚举,联合,详细讲解,内含位段的详细分析

m0_75058342的博客 1770

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

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

c语言自定义类型讲解

2301_79705195的博客 962

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

在我们学习C语言的时候,有几个自定义类型需要我们掌握,那么我也是根据自己的学习来分享一下自己的理解。希望与大家互相学习,共同进步! 文章目录一:结构体1.1:结构体的基础知识1.2:结构的声明1.3:特殊的声明1.4:结构体的自引用1.5:结构体变量的定义和初始化1.6: 结构体内存对齐1.7:修改默认对齐数1.8:结构体传参二:位段2.1:什么是位段2.2:位段的内存分配2.3:位段的跨平台问题三:枚举3.1:枚举类型的定义3.2:枚举的优点3.3:枚举的使用四:联合(共用体)4.1联合类型的定义4.2

qq_43727529的博客 1330

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

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

dab112的博客 1335

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

一个字节占8个比特位,要存储char a的时候需要开辟一个字节的内存单元,在这个内存单元还能放下char b,这个时候已经占了7个比特位了,若要存放char c需要再开辟一个字节的内存单元,但是这个char c会不会使用上次开辟的一个字节剩下的一个比特位呢?然后c2占一个内存单元,就是偏移量为1的位置,i占四个内存单元,应该从偏移量为4的位置开始分配4个内存单元,到偏移量为7的位置,这个时候结构体已攻占了8个内存单元,刚好是最大对齐数4的整数倍。在内部引用的时候,还没有定义这个新的名字得有类型才能重命名。

a002345001的博客 878

【C语言】自定义类型:结构体,联合,枚举(下)

两篇文章搞定C语言的自定义类型!

2403_86779341的博客 2109

自定义类型:结构体(内存对齐),枚举,联合

文章目录自定义类型:结构体(内存对齐),枚举,联合前言:1.结构体1.1结构体类型的声明1.1.1结构的基础知识1.1.2结构的声明语法1.1.3特殊的声明(匿名结构体)问题: 匿名结构体中上式子这样写会怎样? p = &x;1.2**结构的自引用**结论: 结构体的自引用需要用结构体指针1.2.1 `typedef`控制结构体命名1.3**结构体变量的定义和初始化**1.3.1结构体变量的定义1.3.2结构体变量的初始化错误初始化示例:1.4**结构体内存对齐**1.4.1**结构体内存对齐规则*

m0_51723227的博客 1850

[C语言]结构体,枚举,联合,位断等自定义类型详解

一篇文章全部搞懂C语言结构体,枚举,联合,位断等自定义类型

我的博客 2067

【C语言进阶】自定义类型:结构体,枚举,联合

1.结构体1.1结构体类的基础知识1.2结构的声明1.3特殊的声明1.4结构的自引用1.5结构体变量的定义和初始化1.6结构体内存对齐1.7修改默认对齐1.8结构体传参2.段位2.1什么是段位2.2段位的内存分配2.3位段的跨平台问题2.4位段的应用3.枚举3.1枚举类型的定义3.2枚举的优点3.3枚举的使用4.联合4.1联合类型的定义4.2联合的特点4.3联合大小的计算int x;int y;}p1;//声明类型的同时定义变量p1,p1为全局变量//定义结构体变量p2,p2为局部变量。

2201_75642960的博客 662

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

【C语言进阶】自定义类型:结构体、枚举、联合体的详细介绍。

共同学习,相互分享。 1233

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

C语言中有内置类型(int short float)也有自定义类型,比如说结构体,联合,枚举

lehzs的博客 1041
上一篇: 动态内存管理与柔性数组
下一篇: C语言项目实战通讯录
pythoncjavac++
博客等级 码龄5年 718粉丝 71原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

pythoncjavac++

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

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

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

打赏作者

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

抵扣说明:

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

余额充值