一、概念
中文稱爲共用體或聯合體。主要用於共享內存,在C/C++程序的編寫中,當多個基本數據類型或複合數據結構要佔用同一片內存時,我們要使用聯合體;當多種類型,多個對象,多個事物只取其一時(我們姑且通俗地稱其爲“n 選1”),我們也可以使用聯合體來發揮其長處。
在“聯合”中,各成員共享一段內存空間, 一個聯合變量的長度等於各成員中最長的長度。應該說明的是, 這裏所謂的共享不是指把多個成員同時裝入一個聯合變量內, 而是指該聯合變量可被賦予任一成員值,但每次只能賦一種值, 賦入新值則衝去舊值。
二、舉例
(1)用union判斷大小端
union var{
char c[4];
int i;
};
int main(){
var data;
data.c[0] = 0x04;
data.c[1] = 0x03;
data.c[2] = 0x02;
data.c[3] = 0x11;
//數組中下標低的,地址也低,按地址從低到高,內存內容依次爲:04,03,02,11。總共四字節!
//而把四個字節作爲一個整體,應該從內存高地址到低地址看,0x11020304,低位04放在低地址上。
printf("%x\n",data.i);
}
結果:
11020304 //證明是小端(little-endian)
(2)含有struct的union
#include <stdio.h>
void main()
{
union number
{
int i;
struct
{
char first;
char second;
}half;
}num;
num.i=0x4241; /*聯合成員賦值*/
printf("%c%c/n", num.half.first, num.half.second);
num.half.first='a'; /*聯合中結構成員賦值*/
num.half.second='b';
printf("%x/n", num.i);
}
輸出結果爲:
AB
6261