union un
{
struct { int x; int y; int z; }s;//s总共48位
int k;
}u;//u 48位
int main()
{
u.s.x=4;
u.s.y=5;
u.s.z=6;
u.k=0;
printf("%d %d %d %d \n",u.s.x,u.s.y,u.s.z,u.k);
return 0;
}
结果:u.s.x=0; u.s.y=5; u.s.z=6; u.k=0;
union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,un这个结构就包含s这个结构体,而大小也等于s这个结构体的大小,在内存中的排列为声明的顺序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
main()
{
union
{
int i;
struct
{
char first;
char second;
}half;
}number; //i=16位;half=16位,其中first是低8位,second是高8位
number.i=0x4241; //ascii码 42-B,41-A
printf("%c%cn", number.half.first, number.half.second);
number.half.first='a';
number.half.second='b';
printf("%xn", number.i); //ascii码 62-b,61-a
getch();
}
结果:
AB
6261