联合体 union

来源:互联网 发布:欧陆风云4 mac 下载 编辑:程序博客网 时间:2024/06/01 18:55
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的位置放置5z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而 yz的位置的值没有改变,所以应该是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

0 0