C++之 自定义数据类型 枚举、结构体、共用体

时间:2023-12-15 09:45:08

1.枚举

  枚举类型的声明形式为:   enum  枚举类型名   {  变量值列表 };  

   变量值列表里都是整型变量,另外不要忘记最后面的分号! 

 

 比如,enum  weekday   { sun,mon,tue,wed,thu,fri,sat };

这里的枚举元素sun、mon...都没有指定值,它们就使用默认值,依次为0,1,2...。即sun就是0,mon就是1,...sat是6。也可以在声明枚举类型时指定枚举元素的值,比如

enum  weekday  { sun=7, mon=1, tue, wed, thu, fri, sat };

这里sun就是7,mon是1,后面的值在mon的基础上依次加1,即tue等于2,wed为3...sat是6。

   枚举元素按常量处理,不能对它们赋值除了声明的时候,像sun=0;这样的语句就是非法的。

枚举类型我们声明了以后就能像int、float等类型那样用了,可以定义枚举类型的变量。整数值需要赋给枚举变量时,应进行强制类型转换。

  备注:这里只是定义了一个枚举,类似于定义了一个类,后面可以以此枚举为类型,定义相应的枚举对象。

2.结构体 

  结构体就是由不同数据类型也可以是相同数据类型的若干数据组成的结合体,声明形式为:

        struct  结构体名
        {
                数据类型   成员名 1;
                数据类型   成员名 2;
                      :
                数据类型   成员名 n;
        };

这里最后那个分号也不要忘记哦。

    结构体类型变量的定义格式如下:结构体类型名   结构体变量名;

   可以先声明了结构体类型以后再定义结构体变量,也可以把它们放在一起。

   结构体变量占用内存的大小可以用sizeof(结构体类型名或变量名)计算

   在定义结构体变量时可以直接赋初值。结构体成员的使用形式是:结构体变量名.成员名。

    struct student        //学生信息结构体
       { 
               int       num;//学号
               char   name[20];//姓名
               char   sex;//性别
               int       age;//年龄
       }stu={97001,"Lin Lin",'F',19};         // 声明结构体类型的同时,定义结构体类型的变量,并赋初值。也可以分开。

int _tmain(int argc, _TCHAR* argv[])
       { 
                 cout<<stu.num<<"  "<<stu.name<<"  "<<stu.sex<<"  "<<stu.age;
                 return 0;
       }

3.共同体Union

  有的时候需要几个不同类型的变量共用一组内存单元,这时就需要用联合体,联合体类型声明的语法形式为:

       union 联合名
       {
                数据类型     成员名 1;
                数据类型     成员名 2;
                      :
                数据类型     成员名 n;
       };

联合体类型变量声明的语法形式是:联合体类型名   联合体变量名;。联合体类型变量的引用形式是:联合体变量名.成员名。

   union uarea
       { 
                 char    c_data;
                 short   s_data;
                 long     l_data;
       }

联合体类型在内存中是怎样占用内存单元的呢?联合体占用的内存大小是其占内存最大的成员需要的内存大小,就像上边的uarea,它占用的内存大小就是最大成员long需要的4个字节。联合体里同时只能放一个成员的值。uarea放c_data时c_data占用第一个字节,放s_data时s_data占用前两个字节,放l_data时l_data占用全部的4个字节。