结构与联合有和区别?
答:
(1). 结构和联合都是由多个不同的数据类型成员组成, 但在任何同一时刻, 联合中只存放了一个被选中的成员(所有成员共用一块地址空间), 而结构的所有成员都存在(不同成员的存放地址不同)。
(2). 对于联合的不同成员赋值, 将会对其它成员重写, 原来成员的值就不存在了, 而对于结构的不同成员赋值是互不影响的
联合体在对允许位操作的寄存器进行访问时很有优势。
比如定义如下的联合体:
typedef union { struct { unsigned dp :1 ; //page,dp占1个位(第一字节的第0位) unsigned == unsigned int unsigned edp :1 ; //null edp占1个位(第一字节的第1位) unsigned p :3 ; //优先级 p占3个位(第一字节的第2-4位) unsigned re :3 ; //null re占3个位(第一字节的第5-7位) unsigned char pf ; //pgn格式 pf占1个字节(第一字节的第8位) unsigned char ps ; //PDU1的目标地址,或者PDU2的附加PF格式 ps占1个字节 unsigned char sa ; //来源地址 sa占1个字节 }IdFormat; unsigned long IdValue; } ID1939; 引用: typedef struct { ID1939 framID; //ID unsigned char data[8]; //数据域 } Frame1939;
再举例:比如我想要定义一个int型变量(32位环境),对于这个变量,我需要对每一位进行位操作与读取,可以这样实现:
union bit32
{
int whole;
struct
{
usigned int bit0:1;
usigned int bit1:1;
........
usigned int bit31:1;
}byte;
}bittest;
对某个位进行赋值,如 bittest.byte.bit0=1, bittest.byte.bit3=1;
对32个bit组成的int型变量进行整体查看:printf("%d\n",bittest.whole);