枚举_联合(共用体)

枚举
枚举顾名思义就是一一列举,把可能的取值列举出来。

  • 枚举类型定义:
enum Day//星期
{
    Mon,
    Tuse,
    Wed,
    Thur,
    Fir,
    Sat,
    Sun
};

enum Color//颜色
{
    RED,
    GREEN,
    BLUE
};

以上的定义的两个enum Day,enum Color都是枚举类型。
{ }中的内容是枚举类型的肯能取值,也叫枚举常量,这些可能取值都是是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。如以下:

enum Color//颜色
{
    RED=1,
    GREEN=2,
    BLUE=3
};
  • 枚举的优点:
    1.增加代码的可读性和可维护性。
    2.和#define定义的标识符比较,枚举有类型检查,更加严谨。
    3.防止命名污染(封装)。
    4.便于调试。
    5.使用方便,一次可以定义多个常量。

  • 枚举的使用

enum Color//颜色
{
    RED=1,
    GREEN=2,
    BLUE=3
};

enum Color clr = GREEN;//只能用枚举常量给枚举变量赋值,才不会出现类型的差异
clr = 4;

联合(共用体 )

  • 联合类型定义:
    联合是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间,所以联合也叫共用体。

例:

union Un
{
    char c;
    int i;
};
union Un un;//联合变量的定义
printf("%d\n", sizeof(un));
//输出结果为4,由于char和int类型共用同一块空间
  • 联合的特点:
    1.联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
    2.当最大成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍。

例:


#include <stdio.h>

union Un1
{
    char c[5];
    int i;
};

union Un2
{
    short c[7];
    int i;
};

int main()
{
    printf("%d\n", sizeof(union Un1));//8
    printf("%d\n", sizeof(union Un2));//16
    system("pause");
    return 0;
}
  • 联合体和结构体的巧妙使用:
    //将long类型的IP地址,转化为点分十进制的表示形式
#include <stdio.h>

union Ip_addr
{
    unsigned long addr;
    struct
    {
        unsigned char c1;
        unsigned char c2;
        unsigned char c3;
        unsigned char c4;
    }Ip;
};

int main()
{
    union Ip_addr my_Ip;
    my_Ip.addr = 127555555;
    printf("%d.%d.%d.%d\n", my_Ip.Ip.c1, my_Ip.Ip.c2, my_Ip.Ip.c3, my_Ip.Ip.c4);
    system("pause");
    return 0;
}

输出结果:
这里写图片描述


猜你喜欢

转载自blog.csdn.net/zhang21722668/article/details/81839523