共用体(Union)和结构体(strut)在结构上很相似:
union union_type
{
short s;
int i;
double d;
char c[8];
}my_union;
不同的是共用体的成员占据同一块物理地址空间,因此成员之间不是独立的,其中一个成员的值改变可能会影响到其它成员的值。
由于所有的成员占据同一块内存,因此一个共用体变量占据的字节大小由成员变量中最大的那个决定。所以上面那个例子中,union_type占据的内存大小为8bytes (sizeof(union_type))。
下面举一个例子:
union union_type
{
short s;
int i;
double d;
char c[8];
}my_union;
int main()
{
my_union.s = 5; //(signed short 占据 2个字节,最大为65535bytes
cout<<my_union.s<<endl;
my_union.i = 10; // (signed int 占据 4个字节)
cout<<my_union.s;
}
输出:
5
10请按任意键继续. . .
本来my_union的s成员为5,但是由于又对my_union的另外一个成员i赋值,因此影响到了s,所以值会发生改变。
下面再看看一个共用体的图形解释:
首先是一个共用体声明:
union mix_t {
long l;
struct {
short hi;
short lo;
} s;
char c[4];
} mix;
再看看在内存中是怎么分配的:
Over...