1. 联合体的定义
联合体:对同一块内存空间,采取不同类型进行解释(共用一块内存空间)
union 联合体名
{
成员变量 //(可以是基本数据类型,指针,数组和结构体类型)
};
2.哑元
像这种不带类型名字的叫做哑元
union
{
.....
}a; //a不是联合体的名字
typedef union //变成了类型名
{
.....
}a;
3.联合体内存空间的分配
下面代码的内存空间分配如下图:
union undata
{
short st;
char cs[2];
};
int main()
{
union undata x;
x.st=0x6162;
printf("%c,%c",cs[0],cs[1]); //cs[0]=a,cs[1]=b
x.cs[0]=1;
x.cs[1]=2;
printf("%d",st); //st=513
return 0;
}
union ipnode
{
unsigned int addr;
unsigned char s1,s2,s3,s4;
};
union ipnode
{
unsigned int addr;
struct
{
unsigned char s1,s2,s3,s4;
};
};
4.等价写法
union ipnode
{
unsigned addr;
struct //哑元
{
char s1,s2,s3,s4;
}haha; //只是一个变量名,不是类型名。 haha和addr是并列关系,共享内存
};
和上面写法等价
union ipnode
{
unsigned addr;
struct //哑元
{
char s1,s2,s3,s4;
};
};
和上面不一样
union ipnode
{
unsigned addr;
struct haha //一个类型叫 struct haha
{
char s1,s2,s3,s4;
};
};