union内嵌struct用法

来源:互联网 发布:360数据恢复电脑免费版 编辑:程序博客网 时间:2024/06/10 18:02

众所周知,union为联合体,struct为结构体。下面根据实例谈谈用法

[cpp] view plain copy
  1. #include <stdio.h>  
  2. #include <string.h>  
  3. void main()  
  4. {   
  5.     union{                   /*定义一个联合*/  
  6.         char i[6];   
  7.         struct{             /*在联合中定义一个结构*/   
  8.             char first;   
  9.             char second;  
  10.             char third;  
  11.             char fourth;  
  12.             unsigned short five;  
  13.               }half;   
  14.          }number;  
  15.     strcpy(number.i,"abcdA");  
  16.     printf("%c%c/n",number.half.first, number.half.second);  
  17.     printf("%c%c%d/n",number.half.third, number.half.fourth,number.half.five);  
  18. }   
 

union中各个变量是共用内存空间。上例中,char数组和结构体共用内存空间。正如程序输出结果

ab

cd65

char数组赋值,结构体中的变量就会按顺序获得数组中的值。

[cpp] view plain copy
  1. main()   
  2.     {   
  3.          union{                   /*定义一个联合*/   
  4.               int i;   
  5.               struct{             /*在联合中定义一个结构*/   
  6.                    char first;   
  7.                    char second;   
  8.               }half;   
  9.          }number;   
  10.          number.i=0x4241;         /*联合成员赋值*/   
  11.          printf("%c%c/n", number.half.first, mumber.half.second);   
  12.          number.half.first='a';   /*联合中结构成员赋值*/   
  13.          number.half.second='b';   
  14.          printf("%x/n", number.i);   
  15.          getch();   
  16.     }   
 

输出结果为: 
     AB 
     6261 
    从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值; 
当给first和second赋字符后, 这两个字符的ASCII码也将作为i 的低八位和高八 
位。

原创粉丝点击