共用体和枚举类型

2020-04-24  本文已影响0人  KeHaoo
共用体

共用体就是多个不同类型的数据共用一个内存空间

定义
union MyUnion{
    int i;
    char c;
    float f;
};
初始化
union MyUnion myUnion;
//不能对多个成员同时初始化
union MyUnion myUnion1 = {16};//对第一个初始化
union MyUnion myUnion2 = { .c = 'j' };//对指定的进行初始化
使用
myUnion.i = 97;
printf("%d\n", myUnion.i);
printf("%c\n", myUnion.c);
printf("%f\n", myUnion.f);

运行结果



因为输入的是设置的是97 而共用体是内存复用的,所以当使用char读取的时候就会读取到最后一个字节,内容就是‘a’ ,同样浮点型数据也是如此

枚举
enum Weekday
{
    sun,mon,tue,wed,thu,fri,sat
};

void enumTest(){
    enum Weekday workday, weekend;
    workday = mon;
    weekend = sat;
}

赋值的时候必须是定义枚举的时候里面已经有的常量
每个枚举元素都代表一个整数,默认的情况下是从0开始按顺序计数
如sun=0,mon=1,······以此类推
可以直接输出

printf("sum=%d\n", sun);
printf("workday=%d", workday);

也可以在定义的时候设置值,未设置的默认在前一个的基础上+1

enum Weekday
{
    sun = 7,mon,tue=2,wed,thu,fri,sat
};
void enumTest(){
    enum Weekday workday, weekend;
    workday = mon;
    weekend = sat;
    printf("sum=%d\n", sun);
    printf("mon=%d\n", mon);
    printf("tue=%d\n", tue);
    printf("wed=%d\n", wed);
    printf("workday=%d", workday);
}

人为设置可能造成值的重复

enum Weekday
{
    sun = 7,mon,tue=6,wed,thu,fri,sat
};

void enumTest(){
    enum Weekday workday, weekend;
    workday = mon;
    weekend = sat;
    printf("sum=%d\n", sun);
    printf("mon=%d\n", mon);
    printf("tue=%d\n", tue);
    printf("wed=%d\n", wed);
    printf("workday=%d\n", workday);
    if (sun == wed){
        printf("sun == wed");
    }
    else{
        printf("sun != wed");
    }
}
image.png
上一篇 下一篇

猜你喜欢

热点阅读