共用体
语法
union 共用体名{
成员列表
}; 结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。 例如:
union test{
unsigned int a;
unsigned int aa;
unsigned short b;
unsigned char c;
}; 共用体test所占内存大小是最大的成员变量的大小,即`sizeof(test) = sizeof(unsigned int) = 4`。a和aa长度相等,所占内存空间也相等,对这两个变量的读写是等效的。读写b相当于读写a的最后两个字节,c同理。
应用
定义欧拉角类型
typedef struct{
float yaw;
float pitch;
float rol;
} eulr_vector_t; 定义角度类型
typedef float angle_t; 定义联合体
typedef union{
eulr_vector_t eulr;
angle_t angle[3];
}eulr_angle_t;
eulr_angle_t data; 使用eulr_angle_t变量,可以像数组一样遍历每个元素
for(int i=0;i<3;i++)do_something(data.angle[i]); 也可以靠名字单独访问某个元素
do_something(data.eulr.pitch);