1、union是为了让【不同的数据项】存放到【同一段内存】空间中。
2、union数据结构中的多个成员共用一段内存空间,空间大小由最大的成员决定。
3、union使用的范例如下:
1、 union test
{
unsigned int a;
unsigned short b;
unsigned char c;
}union_data;
printf("size: %d\n",sizeof(union_data));
union_data.a = 0x11223344; //内存中 44 33 22 11
union_data.b = 0x5566; //内存中 (66) (55) 22 11
union_data.c = 0x88; //内存中 (88) 55 22 11
printf("%x %x %x\n",union_data.a,union_data.b,union_data.c);
2、struct TypeData
{
int type; //用来区分union test1中使用哪个结构体
union test1
{
struct data1{
unsigned char a;
unsigned char b;
unsigned int c;
}d1;
struct data2{
unsigned char a;
unsigned char b;
}d2;
struct data3{
unsigned int c;
}d3;
}union_data1;
}* p_struct_data1;
void ShowValue(struct TypeData* data)
{
switch(data->type)
{
case 0x01:
printf("%x %x %x\n",data->union_data1.d1.a,data->union_data1.d1.b,data->union_data1.d1.c);
break;
case 0x02:
printf("%x %x\n",data->union_data1.d2.a,data->union_data1.d2.b);
break;
case 0x03:
printf("%x\n",data->union_data1.d3.c);
break;
default:
break;
}
}
struct TypeData* p_struct_data1;
printf("size: %d\n",sizeof(*p_struct_data1)); //12
unsigned int data01[3] = {0x01,0x44332211,0x88776655};
unsigned int data02[3] = {0x02,0x44332211,0x88776655};
unsigned int data03[3] = {0x03,0x44332211,0x88776655};
p_struct_data1 = (struct TypeData *)&data01;
ShowValue(p_struct_data1);
printf("--------------------------------\n");
p_struct_data1 = (struct TypeData *)&data02;
ShowValue(p_struct_data1);
printf("--------------------------------\n");
p_struct_data1 = (struct TypeData *)&data03;
ShowValue(p_struct_data1);
printf("--------------------------------\n");