一.定义
联合体是成员共用内存空间。
二.作用
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("%xrn",&pix.rgb);
printf("%xrn",&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("%Xrn",pix.value);
}
输出:CC332211
unsigned int 是一个4字节数据,而前面我们只定义了三个unsigned char ,只占三个字节。所以MSB自动补齐了。在union中,分配内存空间的大小,等于占内存最大的数据类型字节大小。
先对value赋值,然后再输出R、G、B值
void main()
{
Pix_Typedef pix;
pix.value = 0x00123456;
printf("%Xrn",pix.rgb.Red);
printf("%Xrn",pix.rgb.Green);
printf("%Xrn",pix.rgb.Blue);
}
输出:56 t 34 t 12
可以说明,无论是修改结构体,还是修改unsigned int ,都会对对方造成影响。因为他们是共享同一段内存。
三.初始化
联合变量可以被初始化,但这个初始值必须是联合的第一个成员的类型,而且它必须位于一对花括号内。



