转自:http://blog.csdn.net/feimor/article/details/6858103
转自:http://blog.163.com/yx_xie2007/blog/static/1024642532011101411940162/
union类型特点:
1.union中可以定义多个成员,union的大小由最大的成员的大小决定;
2.union成员共享同一块大小的内存,一次只能使用其中的一个成员;
3.对某一个成员赋值,会覆盖其他成员的值,但前提是成员所占字节数相同,当成员所占字节数不同时只会覆盖相应字节上的值,比如对char成员赋值就不会把整个int成员覆盖掉,因为char只占一个字节,而int占四个字节;
4.联合体union的存放顺序是所有成员都从低地址开始存放的。
eg:typedef union{
char c;
unsigned int u
}Demo_u v;
v.u=0b1111 1111 1111 1111,当v.c的值修改成0b0000时,v.u的值修改成0b1111 1111 1111 0000;
union类型与struct类型的区别:
1.struct类型的大小由成员的所有大小决定,且需要满足字长对齐;
eg:typedef struct{
char c;
unsigned int ui;
}Demo_s s;
结构体变量在8位机所占长度 1+4;在32位机所占长度 4+4;
2.struct变量为每一个成员分配内存,每个成员可以单独使用;
union类型的重要作用-----位操作
eg:
typedef union {
struct {
unsigned LATA0 :1; //结构体中:的定义----位域的长度 LATA0长度 1个bit
unsigned LATA1 :1;
unsigned LATA2 :1;
unsigned LATA3 :1;
unsigned LATA4 :1;
unsigned LATA5 :1;
unsigned LATA6 :1;
unsigned LATA7 :1;
};
} LATAbits_t;
定义 LATAbits_t LATAbits;则可以使用LATAbits.LATAn (n=0-7)依次访问LATAbits变量的第0位到第7位。