第2节 - 联合体与枚举

联合体(Union)

定义

联合体是一种特殊的数据类型,允许在相同的内存位置存储不同的数据类型。您可以定义一个带有多成员的联合体,但是任何时候只能有一个成员带有值。联合体提供了一种使用相同的内存位置的有效方式。

示例代码

#include <stdio.h>

// 定义联合体
union Data {
    int i;
    float f;
    char str[20];
};

int main() {
    union Data data;

    data.i = 10;
    printf("data.i: %d\n", data.i);

    data.f = 220.5;
    printf("data.f: %f\n", data.f);

    strcpy(data.str, "C Programming");
    printf("data.str: %s\n", data.str);

    return 0;
}
            

代码解释

在上述代码中,我们定义了一个名为 `Data` 的联合体,它包含一个整数 `i`、一个浮点数 `f` 和一个字符数组 `str`。由于联合体的所有成员共享同一块内存,因此在给不同成员赋值时,会覆盖之前存储的值。

枚举(Enum)

定义

枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。枚举类型是由程序员定义的一种数据类型,它由一组命名的整数常量组成。

示例代码

#include <stdio.h>

// 定义枚举类型
enum Weekday {
    MONDAY,
    TUESDAY,
    WEDNESDAY,
    THURSDAY,
    FRIDAY,
    SATURDAY,
    SUNDAY
};

int main() {
    enum Weekday today = WEDNESDAY;

    switch (today) {
        case MONDAY:
            printf("今天是星期一\n");
            break;
        case TUESDAY:
            printf("今天是星期二\n");
            break;
        case WEDNESDAY:
            printf("今天是星期三\n");
            break;
        case THURSDAY:
            printf("今天是星期四\n");
            break;
        case FRIDAY:
            printf("今天是星期五\n");
            break;
        case SATURDAY:
            printf("今天是星期六\n");
            break;
        case SUNDAY:
            printf("今天是星期日\n");
            break;
        default:
            printf("无效的日期\n");
    }

    return 0;
}
            

代码解释

在上述代码中,我们定义了一个名为 `Weekday` 的枚举类型,它包含了一周的七天。枚举常量默认从 0 开始依次递增,因此 `MONDAY` 的值为 0,`TUESDAY` 的值为 1,以此类推。

返回课程目录