“聯合”是一種特殊的類,也是一種構造類型的數據結構。在一個“聯合”內可以定義多種不同的數據類型, 一個被說明為該“聯合”類型的變數中,允許裝入該“聯合”所定義的任何一種數據,這些數據共享同一段記憶體,以達到節省空間的目的(還有一個節省空間的類型:位域)。 這是一個非常特殊的地方,也是聯合的特徵。另外,同struct一樣,聯合默認訪問許可權也是公有的,並且,也具有成員函式。
基本介紹
- 中文名:union
- 性質:一種構造類型的數據結構
- 釋義:共用體聲明和共用體變數定義
- 功能:組合面域或實體
關鍵字
union foo{/*“共用”類型“FOO”*/ int i; /*“整數”類型“i”*/ char c; /*“字元”類型“c”*/ double k; /*“雙”精度類型“k”*/};union foo{/*“共用”類型“FOO”*/ char s[10]; /*“字元”類型的數組“S”下面有“10”個元素*/ int i; /*“整數”類型i*/};#include <iostream>using namespace std;union StateMachine { public: char character; int number; char *str; StateMachine(char c) { character = c; } StateMachine(int n) { number = n; } StateMachine(char* s) { str = s; }};enum State {character, number, str};int main() { State state = character; StateMachine machine('J'); ... if(state == character) cout << machine.character << endl; ... return 0;}運算符
命令
聯合與結構的區別
例4:
#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); getchar(); }輸出結果為:
AB
6261
從上例結果可以看出: 當給i賦值後, 其低八位0x41就是first的值,高八位0x42就是second的值; 當給first和second賦字元後, 這兩個字元的ASCII碼也將作為i 的低八位和高八位。

