共用体使用与结构体类似
共用体使用 union语句,union 语句定义了一个新的数据类型,带有多个成员。
结构体使用struct语句,struct 语句定义了一个包含多个成员的新的数据类型。
共用体定义一个数据类型,里面的成员公用一个地址。并且取得是最大的长度如:
union Data
{
uint8_t a;
uint16_t b;
uint32_t c ;
}data;
这个共用体将占用4个字节的内存空间 uint32_t 最大并且占4个字节。
使用结构体定义的话;
struct Data
{
uint8_t a;
uint16_t b;
uint32_t c;
}data;
将占7个4节,由各个成员占的大小相加。
所以就会导致他们使用方法有点区别;
union Data
{
uint8_t a;
uint16_t b;
uint32_t c ;
};
共用体的使用,需要单独赋值和提取出来如:
union Data x;
x.a = 10;//赋值和结构体一样 “点”出来即可。区别就在对共用体赋值后就要取出对应的值即:
printf( "x.a : %d\n", x.a); //这样是没用问题的。
如果是一起赋值 就会出错如
x.a = 10;
x.b= 11;
x.c = 10;
printf( "x.a: %d\n", x.a);
printf( "x.b : %d\n", x.b);
printf( "x.c : %d\n", x.c);
这样就会出错 发现取出的数和赋值不一致;
结构体这样使用没有问题
struct Data
{
uint8_t a;
uint16_t b;
uint32_t c ;
};
struct Data x;
x.a = 10;
x.b= 11;
x.c = 10;
printf( "x.a: %d\n", x.a);
printf( "x.b : %d\n", x.b);
printf( "x.c : %d\n", x.c);
因为每个数据的地址都不一样,赋值的时候不会产生干扰.