在c語言中,學會使用聯合(union)來進行程序設計是一個很重要的技能,同時,在閱讀許多優秀源碼時,也會看見聯合的身影。於是乎,尋求了許多資料 ,將其一些相關知識總結在下面了。
一、什么是聯合(union)?
聯合(union)是一種數據類型,特點是:
(1)能在同一個存儲空間中儲存不同的數據類型(注意不是同時存儲)
(2)聯合只能儲存一個值,這一點與結構是不同的。
(3)在聯合中,一次只儲存一個值,即使有足夠的空間,也不能同時儲存多個值。例如同時存儲一個char類型值和一個int類型的值。所以說,在設計編寫程序時,就需要明確注意當前儲存在聯合中的數據類型。
(4)編譯器需分配足夠的空間以便能儲存聯合聲明中占用最大字節的類型。
二、聯合的使用和一些技巧總結
(1)創建聯合方法
——聯合模板+聯合變量;
1 //創建(聲明)聯合模板car
2 union car 3 { 4 char car_name; 5 double car_speed; 6 int car_num; 7
8 }; 9
10 //定義三個與car相關的聯合變量
11 union car MaxCar; //car類型的聯合變量
12 union car Car_array[40]; //內含40個聯合變量的數組
13 union car *ptcar; //指向car類型聯合變量的指針
說明:創建聯合和創建結構的方式相同。若按照如上的代碼形式聲明的結構可以存儲一個char類型、一個double類型和int類型的值。但是聲明的聯合只能儲存一個char類型的值或一個double類型的值或int類型的值。
(2)初始化聯合
有三種方法初始化聯合:
1、把一個聯合初始化為另一個同類型的聯合
2、初始化聯合的第一個成員
3、使用指定初始化器(C99標准)
如下 代碼:
1 union car first_car; 2 first_car.car_name='A'; 3 union car sec_car=first_car; //把一個聯合初始化為另一個同類型的聯合
4
5 union car car_a={'B'}; //初始化聯合的第一個成員
6
7 union car car_b={.car_num=2}; //使用指定初始化器來初始化聯合car_b
(3)使用聯合
1、使用方法(一)
用一個成員把值儲存在聯合中,然后用另一個成員查看內容。
2、使用方法(二)(該方法參考於《c Primer Plus》)
可以將聯合與結構一起來使用,在結構中儲存與其成員有從屬關系的信息
//聲明owner結構
struct owner_car { int car_num; char car_name; }; //聲明rent_car結構
struct rent_car { double car_price; int car_type; }; //聲明car_info聯合
union car_info { struct owner_car OwnerCar; struct rent_car RentCar; }; //聲明car_data結構
struct car_data { int carID; int status; //0——私有,1——租車
union car_info CarInfo; };
說明:如上代碼中,若FirstCar是car_data結構類型的變量,如果FirstCar.status=0,程序將使用FirstCar.CarInfo.OwnerCar.car_num;如果FirstCar.status=1,程序將使用FirstCar.CarInfo.RentCar.car_price(注:這段是一種設想情況)
總結:通過該種方法可以對數據進行選擇性組織,從而可以構建出一種很有用的數據模型。