聯合和列舉型別
說了結構體,就不得不說聯合和列舉。
聯合這個型別的設計就是為了節省記憶體,聯合內的元素共用一段儲存空間,空間大小由最大的資料元素決定。聯合空間只有一個最新賦值的成員值有效。一句話總結:空間共享,後來為主。
聯合的定義跟結構一樣,也有3種方式“:
union UNI
{
char ch;
float x;
};
union UNI u;
或
typedef union UNI
{
char ch;
float x;
}UNI;
UNI u;
或
typedef union
{
char ch;
float x;
}UNI;
UNI u;
聯合變數u可以初始化,但只能初始化第一個成員,即不能對聯合變數整體賦值。
列舉型別也是一種使用者自定義型別,它允許使用者定義有限個常量(注意是常量!),每個常量由使用者自己的識別符號來標示,這種型別更貼近處理實際問題,每個常量識別符號都有確定的意義,增強程式碼的可讀性。
列舉型別的定義與結構體、聯合一樣,
例:enum WEEKDAY {Sun,Mon,Tue,Wed,Thu,Fri,Sat};
enum WEEKDAY w;
給列舉變數賦值的一般是列舉元素,用常量表達式給列舉變數賦值時必須要強制型別轉換,列舉元素是常量,不能作為左值!
w = mon; //列舉元素給列舉變數賦值
w = (enum WEEKDAY)6;// 常量表達式給列舉變數賦值
mon = (enum WEEKDAY)1;//非法