一.定义
联合体是成员共用内存空间。
二.作用
1.在不同时刻把不同东西存在同一个位置时可以使用联合体
例:
声明了一个结构体和一个联合体,联合体内部包含了一个结构体和一个无符号整形数据(32位的)
#include "stdio.h"
typedef struct
{
unsigned char Red;
unsigned char Green;
unsigned char Blue;
}RGB_Typedef;
typedef union
{
RGB_Typedef rgb;
unsigned int value;
}Pix_Typedef;
void main()
{
Pix_Typedef pix;
printf("%x\r\n",&pix.rgb);
printf("%x\r\n",&pix.value); //value与rgb的首地址相同
}
定义三原色分别为0X11、0X22、0X33,然后不再做任何处理,直接打印value
void main()
{
Pix_Typedef pix;
pix.rgb.Blue=0X33;
pix.rgb.Green=0X22;
pix.rgb.Red=0X11;
printf("%X\r\n",pix.value);
}
输出:CC332211
unsigned int 是一个4字节数据,而前面我们只定义了三个unsigned char ,只占三个字节。所以MSB自动补齐了。在union中,分配内存空间的大小,等于占内存最大的数据类型字节大小。
先对value赋值,然后再输出R、G、B值
void main()
{
Pix_Typedef pix;
pix.value = 0X00123456;
printf("%X\r\n",pix.rgb.Red);
printf("%X\r\n",pix.rgb.Green);
printf("%X\r\n",pix.rgb.Blue);
}
输出:56 \t 34 \t 12
可以说明,无论是修改结构体,还是修改unsigned int ,都会对对方造成影响。因为他们是共享同一段内存。
三.初始化
联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且它必须位于一对花括号内。