枚举与联合

1.枚举类型:enum

枚举适用于定义常量命名的,对于如何理解定义常量命名,可以参考 #define,即将100的命名替换成 MAX。这有利于提高代码的可读性。

#define MAX 100

在下面的代码中:也进行了常量的命名自定义,枚举类型中的元素默认从0开始依次递增,也就是说Monday=0,Tuesday=1,但是也可以自己修改,Monday=1,Tuesday=2,也可以只修改其中的一个数值,记住除赋值外,依次比上面+1。此外,字符也可以是被命名的常量,字符相当于阿斯克码值。

#include <stdio.h>

// 定义枚举类型
enum Weekday {
    Monday,//0
    Tuesday,//1
    Wednesday=5,
    Thursday,//6
    Friday,//7
    Saturday,//8
    Sunday//9
};

int main() {
    // 声明枚举变量
    enum Weekday today;

    // 给枚举变量赋值
    today = Wednesday;

    // 使用枚举变量
    if (today == Wednesday) {
        printf("Today is Wednesday.\n");
    } else {
        printf("Today is not Wednesday.\n");
    }

    return 0;
}

因为是定义常量命名,所以在 today == Wednesday条件判断上也可以写成 today == 2,如果枚举中Wednesday='w',那么在条件判断可以写成 today == 'w'。
枚举可以使赋值变的可读,可以简化代码,并增加代码的可读性和可维护性。

2.联合类型:union

联合是一种特殊的数据类型,允许在同一内存位置存储不同的数据类型。与结构体类似,联合可以包含多个成员,但是在任何给定时间只有一个成员可以拥有值。

#include <stdio.h>

union UnionType {
    int intValue;
    float floatValue;
};

 也就是说每次调用联合类型的变量时,只能用一个成员,如下:

int main() {
    union UnionType value;

    value.intValue = 42;
    printf("Integer value: %d\n", value.intValue);

    value.floatValue = 3.14;
    printf("Float value: %f\n", value.floatValue);

    printf("Integer value after float assignment: %d\n", value.intValue);

    return 0;
}

联合因为一次只能使用一个成员,所以在内存存放上也有特点:
        联合的内存大小通常是其成员中占用内存最大的那个成员的大小。这是因为联合中的所有成员共享同一块内存空间,该空间的大小必须足够大,能够容纳联合中最大的成员。
对于上面的代码来说,有int 和 float类型,内存大小就是8(大的那个),如果成员有数组,比如:

#include <stdio.h>

union UnionType {
    int intValue;
    char array[10];
};

这里内存大小是12而不是10,是因为这里存在对齐,char类型的对齐数是1,int类型对齐数是4,所以内存大小是最大内存的成员再进行对齐,最后得到12。(和struct结构体不同,如果是结构体那么内存会是4+10再对齐是16)

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值