c语言--共用体union和enum(枚举)

目录

前言:

1.共用体定义:

2.共用体(Union)特点:

3.enum(枚举)

3.1 枚举的基本语法

3.2 枚举的特点


前言:

共用体union和enum(枚举)本身没有什么关系,但是enum枚举的定义和结构体,共用体都很相似,为了节约篇幅,本章一并解释讲解。

1.共用体定义:

2.共用体(Union)特点:

内存共享:
在共用体中,所有的成员共享同一块内存空间。这意味着,无论你在共用体中定义了多少个数据类型,所占用的内存大小仅为最大成员的数据类型的大小。例如,如果一个共用体包含一个整数(4字节)、一个浮点数(4字节)和一个字符数组(20字节),那么整个共用体只会占用20字节的内存。  

 只关心一个值:(最终赋值有效)
由于共用体的设计,你可能只会在某个时刻使用其中的一个成员。例如,一个程序可能需要处理多种类型的数据,但在某一时刻只需要知道其中之一的值。在这种情况下,使用共用体可以减少内存的浪费。

关于上述两点的解释,尤其第二点,以下是代码示例及解释:

#include <stdio.h>
#include <string.h>

// 定义共用体
union InputData {
    int intValue;
    float floatValue;
    char strValue[20];
};

int main() {
    union InputData data;

    // 假设我们现在要处理一个整数
    data.intValue = 42;
    printf("Integer: %d\n", data.intValue);

    // 现在我们要处理一个浮点数
    data.floatValue = 3.14f; 
    printf("Float: %.2f\n", data.floatValue);
    
    // 再换成一个字符串
    strcpy(data.strValue, "Hello");
    printf("String: %s\n", data.strValue);
    
    // 注意:此时 intValue 和 floatValue 的值是不确定的,因为它们共享同一块内存
    // 只有最后一个赋值的成员是有效的
    return 0;
}

3.enum(枚举)

枚举用于表示有限且离散的值。例如,颜色、星期几、状态等,这些都是可以用枚举来表示的。

3.1 枚举的基本语法

EnumName:这是枚举的名称。
Constant1, Constant2, ...:这些是枚举成员,可以直接使用它们的名称,而不需要额外的值

enum EnumName {
    Constant1,
    Constant2,
    Constant3,
    ...
};

如果没有显式指定枚举常量的值,C语言会自动为其赋值,第一个常量的默认值为0,后续常量的值会依次递增。例如:


enum Color {
    RED,    // 0
    GREEN,  // 1
    BLUE=3    // 也可以显视地为成员赋值
};

3.2 枚举的特点

枚举的实际类型是整型,因此所有的枚举值都是整数。

枚举常量的作用域是全局的,在同一个文件内不能有两个相同名称的枚举常量。 

枚举可以用作函数参数或返回值,使得函数接口更加明确,下面是关于枚举作为函数参数的代码示例:

#include <stdio.h>

// 定义天气状态的枚举
enum Weather {
    SUNNY,
    RAINY,
    CLOUDY,
    SNOWY
};

// 根据天气给出建议的函数
const char* getWeatherSuggestion(enum Weather weather) {
    switch (weather) {
        case SUNNY:
            return "晒太阳";
        case RAINY:
            return "记得带伞";
        case CLOUDY:
            return "适合户外锻炼";
        case SNOWY:
            return "下雪路滑";
        default:
            return "未知天气";
    }
}

int main() {
    enum Weather today = SUNNY;  // 设置今天的天气为晴天

    // 调用函数并打印建议
    printf("Weather suggestion: %s\n", getWeatherSuggestion(today));

    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值