http://hi.baidu.com/Ã×À¼»ê_swust/blog/item/3f79de222acd9743ad34dea3.html

 

#include "iostream"
using namespace std;
union U
{
struct X
{
   int s1;
   int s2;
   int s3;
} x;
unsigned int c;
} u;
struct S
{
char a;
int b;
double c;
}s;
void main()
{
cout << "union's size:"<<sizeof(u) <<endl;//12 is size;,中最内存的变量是一个结构体X,他的值是12,所以联合的内存值也是12
cout << "size of struct" << sizeof(s) << endl; //16 is size,1+4+8 = 13,大于13而且是8的倍数的最小值
}

联合在内存中的大小为他成员变量中的最大值,因为联合中的成员都占用同一块内存,在每一瞬间只能存放其中一种,而不是同时存放几种,换句话说就是每一瞬间只有一个成员变量起作用.能够访问的是共用体变量中最后一次被赋值的成员.在对一个新的成员赋值后原有的变量就失去了作用.联合变量的地址和它的各个成员的地址都是一样的.

结构体在内存中的大小为成员变量中最大的那个变量占用的大小的整数倍,而且是最小的能够容纳所以变量的大小之和.

 

posted on 2012-02-20 00:26  draeag  阅读(188)  评论(0编辑  收藏  举报