C++中有以下幾種自定義數據類型方式:typedef、union、enum
typedef
typedef只是用於重命名一種已有的數據類型。
typedef char C; //C c即char c typedef char field [50]; //field s即char[50]
注意第二種用法,數組的維數[50]是寫在最后的。
union
union中的每個成員共享同一段內存(每個成員的起始內存位置都是一樣的),整個union的大小取決於最長的成員的大小。
union mix_t { long l; struct { short hi; short lo; }s; char c[4]; }mix;
這個union的內存示意圖如圖下所示(注意32位機器上,char為1byte,short為2bytes,long為4bytes)

匿名union
非匿名union(union的名字為price)
struct { char title[50]; char author[50]; union { float dollars; int rmbs; } price; } book;
匿名union(union沒有名字)
struct { char title[50]; char author[50]; union { float dollars; int rmbs; }; } book;
那么這兩種結構的不同就是元素的訪問方式不同,假如我們要訪問dollars這個元素,第一種是book.price.dollars,第二種是book.dollars。
enum
枚舉類型,其中枚舉值是常量,而不是變量。
enum days{Mon, Tue, Wed, Thur, Fri, Sat, Sun}; days today = Mon;
其中Mon其實是0,Tue是1,以此類推。
當然Mon不一定要從0開始,所以可以這樣寫……
enum days{Mon=1, Tue, Wed, Thur, Fri, Sat, Sun};
其中Mon是1,Tue是2,以此類推。
之前一直犯一個錯誤,直到今天(2015年4月11日)看objc的時候才發現,
enum days{Mon, Tue=2, Wed}; //0 2 3 cout << Mon << endl; //輸出0而不是1
