结构体与共用体详解

一、多个数据组合的空间

1、相同数据类型组合的空间

c语言提供数组的概念来封装具有多个相同数据类型的空间,但是c语言不承认有数组类型。

2、不同数组类型组合的空间

在原子类型基础上,若能将更多的类型打包成一个类型,那么访问和程序设计时,将会更容易,根据打包形势分成结构体(struct)和共用体(union)。

二、

typedef ;

(默认规则)结构体 为了提高内存访问效率,在软件编译时,会引入字节对齐的规则;

1、结构体中最大的基本数据类型作为对齐标准;

2、根据/2原则,依次填充;

调整结构体对齐使其紧凑即可实现数据紧凑合并;

也可以指定规则,可以指定对齐方式;#pragma pack (1)【#预处理处理】包按1b对齐来分;

三、共用体封装方式,访问方法;

位域

位域是一种在结构体中定义成员时,可以指定其占用的位数的技术。通过使用位域,可以在一定程度上节省内存空间,因为可以将多个成员压缩在同一个字节或单词中。在定义位域时,需要指定成员名、占用的位数和数据类型。例如:

struct { unsigned int flag1 : 1; unsigned int flag2 : 2; unsigned int flag3 : 3; } myFlags;

上面的代码定义了一个结构体 myFlags,其中包含三个位域成员 flag1flag2flag3,它们分别占用了 1、2 和 3 个二进制位。这样,可以使用一个字节(8 个二进制位)来存储这三个成员的值。

需要注意的是,不同编译器对位域的实现可能会有所不同,因此在使用位域时需要注意可移植性。另外,位域的使用也可能会影响程序的性能,因为访问位域成员需要进行位运算,而这可能比访问普通成员更耗时。

芯片里一个区域控制一个功能;内存中以16进制表示出来,运用了unsigned int b1:3(分配空间三位);unsigned int b1:4(分配空间4位)这个语法,可以控制寄存器位的数据;也可以对整个32位赋值(对于32位寄存器);

 

共用体内存共用,先定义的会被后定义的覆盖;val会b1定义的值覆盖

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值