枚举类型和共用体 实现 变体

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

// 定义枚举类型来表示值的类型
typedef enum {
    TYPE_INT,
    TYPE_FLOAT,
    TYPE_STRING
} VariantType;

// 定义共用体来存储不同类型的值
typedef union {
    int int_value;
    float float_value;
    char *string_value;
} VariantValue;

// 定义变体结构体
typedef struct {
    VariantType type;
    VariantValue value;
} Variant;

// 函数用于初始化整数类型的变体
void init_variant_int(Variant *variant, int value) {
    variant->type = TYPE_INT;
    variant->value.int_value = value;
}

// 函数用于初始化浮点数类型的变体
void init_variant_float(Variant *variant, float value) {
    variant->type = TYPE_FLOAT;
    variant->value.float_value = value;
}

// 函数用于初始化字符串类型的变体
void init_variant_string(Variant *variant, const char *value) {
    variant->type = TYPE_STRING;
    variant->value.string_value = strdup(value);
}

// 函数用于打印变体的值
void print_variant(const Variant *variant) {
    switch (variant->type) {
        case TYPE_INT:
            printf("Integer: %d\n", variant->value.int_value);
            break;
        case TYPE_FLOAT:
            printf("Float: %.2f\n", variant->value.float_value);
            break;
        case TYPE_STRING:
            printf("String: %s\n", variant->value.string_value);
            break;
        default:
            printf("Unknown type\n");
    }
}

// 函数用于释放变体的内存
void free_variant(Variant *variant) {
    if (variant->type == TYPE_STRING) {
        free(variant->value.string_value);
    }
}

int main() {
    Variant var1, var2, var3;

    // 初始化不同类型的变体
    init_variant_int(&var1, 42);
    init_variant_float(&var2, 3.14f);
    init_variant_string(&var3, "Hello, World!");

    // 打印变体的值
    print_variant(&var1);
    print_variant(&var2);
    print_variant(&var3);

    // 释放字符串类型变体的内存
    free_variant(&var3);

    return 0;
}    

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值