在C语言中结构体是这样定义的:
union struct{
float a;
float b;
int c;
}data_t;
联合体是这样定义的:
union data{
float a;
float b;
int c;
}data_t;
但是他们的功能完全不同~~
联合体:“ 需要使几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构,在C语言中,被称作“共用体”类型结构,简称共用体,也叫联合体。”(百度百科)
#include <string.h>
#include <stdio.h>
union data{
float a;
float b;
int c;
}data_t;
int main()
{
printf("sizeof(float):%d\nsizeof(data_t):%d\n",sizeof(float),sizeof(data_t));
return 0;
}
运行结果:
sizeof(float):4
sizeof(data_t):4
而结构体:
#include <string.h>
#include <stdio.h>
struct data{
float a;
float b;
int c;
}data_t;
int main()
{
printf("sizeof(float):%d\nsizeof(data_t):%d\n",sizeof(float),sizeof(data_t));
return 0;
}
运行结果:
sizeof(float):4
sizeof(data_t):12
联合体在单片机中的应用
单片机中经常会遇见分离高低字节的操作,比如进行计时中断复位操作时往往会进行
(65535-200)/256,(65535-200)%256这样的操作,而一个除法消耗四个机器周期,取余也需要进行一些列复杂的运算,如果在短时间内需要进行很多次这样的运算无疑会给程序带来巨大的负担。其实进行这些操作的时候我们需要的仅仅是高低字节的数据分离而已,这样利用联合体我们很容易降低这部分开销。(百度百科)