5 共用体成员的起始地址相同,共用一块内存空间,值相互覆盖 
- #include <stdio.h>int main(){    union Nn{int a; double b;}nn;// 成员的起始地址相同,值相互覆盖
 
 -     nn.a = 123; // 
 
 -     printf("起始地址:%X,内存空间占用:%d\n",&nn.a,sizeof nn.a);
 
 -     nn.b = 12.3;    printf("起始地址:%X,内存空间占用:%d\n",&nn.a,sizeof nn.b);
 
 -     nn.a = 12;    printf("起始地址:%X,内存空间占用:%d\n",&nn.a,sizeof nn.a);
 
 -     getchar();
 
 - }/*
 
 - 起始地址:12FF40,内存空间占用:4
 
 - 起始地址:12FF40,内存空间占用:8
 
 - 起始地址:12FF40,内存空间占用:4
 
 - */
 
  
当一些事物具有更多共性,但有少量差异时,可以只用一个内嵌一个共用体的结构体来描述: 
- #include <stdio.h>#include <string.h>#define MAXPARTS 12struct Parts{ // 零件
 
 -         int cost;        char supplier[12];        char unit[12] ;
 
 - };struct Assembly{ // 装配件
 
 -         int n_parts;        struct {
 
 -                 char partno[12];
 
 -                 short quan;
 
 -         }parts[MAXPARTS];
 
 - };struct Inventory{ // 存货类型,或是零件,或是装配件
 
 -         char partno[10];        int quan;        enum{PART,ASSEMBLY}type; // 存货类型
 
 -         union {                struct Parts parts;
 
 -                 struct Assembly assembly;
 
 -         }info;
 
 - };int main(){        struct Inventory screen;
 
 -         strcpy(screen.partno,"p001");
 
 -         screen.quan = 12;
 
 -         screen.type = Inventory::PART;
 
 -         screen.info.parts.cost = 122;        strcpy(screen.info.parts.supplier,"hw");        strcpy(screen.info.parts.unit,"pcs");        
 
 -         struct Inventory shell;
 
 -         strcpy(shell.partno,"a001");
 
 -         shell.quan = 4;
 
 -         shell.type = Inventory::ASSEMBLY;
 
 -         shell.info.assembly.n_parts=22;        strcpy(shell.info.assembly.parts[0].partno,"d001");
 
 -         shell.info.assembly.parts[1].quan = 5;        int costs;        if(shell.type == Inventory::ASSEMBLY)
 
 -                 costs = shell.info.assembly.n_parts;        
 
 -         printf("%d\n",costs); //22
 
 -         getchar();        return 0;
 
 - }
 
  
 
  |