枚举类型、联合类型

1联合union

  联合 (union) 是一个能在同一个存储空间里(但不同时)存储不同类型数据的数据类型。

  编译器为联合分配足够的空间保存所描述的可能性的最大需要。

  下面是一个带有标记的联合模板例子:

    union hold{    //带有标记的联合的模板 

      int digit; 

      double bigf1; 

      char letter; 

    };

  下面是定义3个 hold 类型联合变量的例子 

    union hold fit;      //hold类型的联合变量 

    union hold save[10];  //10个联合变量的数组 

    union hold *pu;      //指向hold类型变量的指针

  初始化联合:

    union hold valA; 

    valA.letter = 'R'; 

    union hold valB = valA;  //把一个联合初始化为另一个联合 

    union hold valc = {88};   //初始化联合的 digit 成员

    union hold valD = {.bigf1 = 118.2}; //指定初始化项目

  联合的使用方法:即使有足够的空间,也不能同时保存2个值

    fit.digit = 23; //把 23 存储在 fit 中,使用 4 个字节 

    fit.bigf1 = 2.0; //清除 23,存储2.0,使用 8 个字节

    fit.letter = 'h'; //清除 2.0,存储 'h',使用1个字节

2枚举enum 

枚举值属于构造类型

enum 枚举名 {枚举值表};
例:
enum WeekDay
{
    Monday = 1
,
    TuesDay,
    WednesDay,
    TursDay,
    FriDay,
    SaturDay,
    SunDay
};

枚举是指将变量的值一一列出来,变量的值只限于列举出来的值的范围内。它用于声明一组命名的常数,当一个变量有几种可能的取值时,可以将它定义为枚举类型。

 
在枚举类型中声明的第一个枚举成员它的默值为0。以后的枚举成员值是将前一个枚举成员(按照文本顺序)的值加 1 得到的。这样增加后的值必须在该基础类型可表示的值的范围内;否则,会出现编译时错误。
 

1.在C编译系统中,枚举值是常量,不是变量,只有在定义时才能对其赋值,不能在程序中再使用赋值语句对他们赋值。

2.枚举值是常量,它们是有值的,按定义的顺序使它们的值为 0, 1, 2… 。

 上面定义的枚举类型 WeekDay 中,MonDay 的值为 0 ,TuesDay 的值为1 … ,这些都是系统自动赋给的。如果定义时赋值 MonDay=2 ,那么输出day的时候 day=4;如果定义时赋值 MonDay=2,同时赋值 FriDay=3 时,输出 day 的值还是 day=4 。

3.枚举值可以比较,枚举值的比较是按其定义时的值进行比较的。
 if (SunDay]]]]>Monday)             //枚举值可以进行比较
    {
        printf("day = %d ",day);
        printf("day2 = %d ",day2);
    }

4.给枚举变量赋值时不能直接赋整数,因为它们属于不同的数据类型,应先强制类型转换才能赋值。

例:enum WeekDay day2;
    
    day2=(enum WeekDay)4;

 

原文地址:https://www.cnblogs.com/Alling/p/3971101.html