| 
    聯合 Union 是一種將不同資料型態儲存在同一個記憶體空間的特殊資料型態,也就是說,所有在 union 宣告的變數會共享同一個記憶體空間,而且會以宣告的變數型態 size 最大的變數空間作為記憶體空間。 
   
下列以圖示,示範程式 
| 程式 | 記憶體配置圖 |  
#include <stdio.h> 
#include <stdlib.h>
  
union unionType{ 
    int x; 
    char y[2]; 
    char z; 
}a;
  
int main(int argc, char *argv[]){ 
    a.x=0; 
    a.z="1"; 
    printf("a.x=%d , a.y[0]=%c\n",a.x, a.y[0]); 
    printf("address : a.x=%ld , a.y[0]=%ld , a.y[1]=%ld , 
    a.z=%ld\n", &a.x, &a.y[0], &a.y[1], &a.z); 
    printf("size : a=%d , a.x=%d , a.y[0]=%d ,     a.z=%d\n",sizeof(a) , sizeof(a.x), sizeof(a.y[0]) ,  
    sizeof(a.z)); 
}
 |  
  
    | 
  
 
程式宣告一個名為 a  的 union 型態變數,裡面一共有 1 個名為 x 的 int,1 個名為 y 的兩空間 char 陣列及 1 個名為 z 的 char。 
這裡面以 int 使用 4 bytes 為最大使用空間,因此 a 總大小為 4 bytes。 
y 陣列的第 0 個空間與 x 的第 0 bytes 及 z 共用。依程式執行結果,它們都是從記憶體位址 4225568 開始。 
程式先執行 a.x = 0,使得 a 的 4 個 bytes 皆清除為 0,再以 a.z="1" 設定 a 的第 0 bytes 為 "1" (相當於 ASCII 值為 49)。 
因共用的關係,當 a.z 改變後,會連帶影響 int x 與 char y[0]。 
 
union 之定義、宣告、使用,與 struct 一樣,大略有三種方式。
  
| union 定義方式: | 
   
  
union 聯合名稱{ 
      資料型態 聯合成員名稱1; 
      資料型態 聯合成員名稱2; 
      .................. 
      資料型態 聯合成員名稱n; 
  }變數名1,變數名1,...,變數名n; 
  //變數宣告為 union 者可以在此宣告 
   
  範例: 
  union unionT{ 
      int x; 
    char y[2]; 
    char z; 
  }a; 
   
  
  | 
typedef union 聯合名稱 另一個聯合名稱;
  
union 聯合名稱{ 
    資料型態 聯合成員名稱1; 
    資料型態 聯合成員名稱2; 
    .................. 
    資料型態 聯合成員名稱n; 
}變數名1,變數名1,...,變數名n; 
   
  範例: 
  typedef union unionT UnionT; 
   
  union unionT{ 
    int x; 
    char y[2]; 
    char z; 
}a; 
     
  
  | 
 typedef union 聯合名稱{ 
      資料型態 聯合成員名稱1; 
    資料型態 聯合成員名稱2; 
    .................. 
    資料型態 聯合成員名稱n; 
  }另一個聯合名稱; 
   
  範例: 
typedef union UnionT{ 
    int x; 
    char y[2]; 
    char z; 
}a; | 
   
  
| union 宣告方式: | 
   
  
union unionT c; 
    | 
union unionT c; 
  UnionT d; 
    | 
union unionT c; 
  UnionT d; | 
   
  
| union 使用方式: | 
   
  
a.x=2; 
  a.y[0]="A"; 
  a.y[1]="B"; 
  a.z="b"; | 
a.x=2; 
  a.y[0]="A"; 
  a.y[1]="B"; 
  a.z="b";
  | 
a.x=2; 
  a.y[0]="A"; 
  a.y[1]="B"; 
  a.z="b"; | 
   
 
 
另一個與 struct 結合的範例:
  
typedef struct bitset{ 
    unsigned int w:2; 
    unsigned int x:3; 
    unsigned int y:1; 
    unsigned int z:2; 
}Bitset; 
 
union unionType{ 
    char p; 
    Bitset k; 
}a; 
 
int main(int argc, char *argv[]) { 
a.p="\0"; 
a.p=(char) 118; 
printf("a.k.w=%d , a.k.x=%d , a.k.y=%d , a.k.z=%d\n",a.k.w, a.k.x, a.k.y, a.k.z); 
printf("size : a=%d\n",sizeof(a)); 
} | 
  
  
  | 
 
 
 |