联合体节省内存空间
确保多个互斥的结构成员不会同时出现(浪费RAM)。
这个就很容易理解了,多个变量使用同一处内存。
应用:
- 判断系统用的是big endian 还是 little endian
- 强制类型转换(int 和 char数组转换,float 和 char数组转换)
- 用一个成员把值存储在一个联合中,然后用另一个成员查看内容。一般用在位域场景。
- //便于阅读代码。
- 在结构中储存与其成员有从属关系的信息。
联合体的应用举例:
场景1:判断系统用的是big endian 还是 little endian
`/*`
`使用联合体,判断系统是大端还是小端。`
`大端模式:高位对应低地址,低位对应高地址 ;小端模式:高位对应高地址,低位对应低地址 ;`
`union量的存放顺序是所有成员都从低地址开始存放的。`
`*/`
`#include <stdio.h>`
`#include <stdlib.h>`
`union AA`
`{
`
`int b;`
`char a;`
`};`
`void main(void)`
`{
`
`union AA temp={
.b=1};`
if(1 == temp.a)
{
printf("little endian.\n");
}
else
{
printf("big endian.\n");
}
`}`
应用场景2:强制类型转换(不同数据类型,进行转换)
/*
举例:强制类型转换
单片机应用场景:
AA: 将int的数据转换成4个字节数组,通过uart发出去。
CC: 将float的数据转换成4个字节数组,通过uart发出去。
*/
`#include <stdio.h>`
`#include <stdlib.h>`
`union AA`
`{
`
`int b;`
`char a[4];`
`};`
`union<