一、共用体
共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
定义格式为:
union 共用体名 { 共用体成员 1, 共用体成员 2, ... };
结构体和共用体的区别:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存大于等于所有成员占用的内存的总和(对齐造成的),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
使用场景:
1.通信中的数据包会用到共用体,因为不知道对方会发送什么样的数据包过来,定义几种格式的包,收到包之后就可以根据包的格式取出数据。
2.节约内存。如果有2个大内存的数据结构,但不会同时使用,可以考虑用共用体来设计。
3.某些应用需要大量的临时变量,变量类型不同,而且会随时更换。而堆栈空间有限,不能同时分配大量临时变量。这时可以使用共用体让这些变量共享同一个内存空间,这些临时变量不用长期保存,用完即丢,和寄存器差不多,不用维护。
二、数据存储 1.浮点数定义共用体
union eeprom_float
{
float a;
uint8_t b[4];
}float_write,float_read;
// 声明
float_write.a = 3.1415926;
浮点数是4个字节,声明float_write.a=3.1415926,由于共用体共占一段内存,把一个float拆分为4个字节,然后逐字节的写入EEPROM,来达到保存float数据的目的。所以,通过float_read.b即可拆分flaot数据。
读写数据:
for(i=0;i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?