http://blog.chinaunix.net/u2/84450/showart_1829958.html
可以使用联合体来发挥其长处。首先看一段代码:union myun
{
struct { int x; int y; int z; }u;
int k;
}a;
int main()
{
a.u.x =4;
a.u.y =5;
a.u.z =6;
a.k = 0;
printf("%d %d %dn",a.u.x,a.u.y,a.u.z);
return 0;
}union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而y,z的位置的值没有改变,所以应该是0,5,6当程序变成union myun
{
struct { int x; int y; int z; }u;
int k;
int j;
}a;
int main()
{
a.u.x =4;
a.u.y =5;
a.u.z =6;
a.k = 0;
a.j = 1;
printf("%d %d %dn",a.u.x,a.u.y,a.u.z);
return 0;
}结果为1,5,6因为还是从最低的地址开始覆盖,而不是像有些人想象的是 0,1,6