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,以此类推。