C语言之void *的使用

2024-02-27  本文已影响0人  那个混子

最近在写一个调参系统,为了方便变量的传入和修改,遇到了个问题,

不同的类型变量传入,我使用结构体数组列表来储存,但是其中变量的指针,我不知道要怎么处理,因为变量类型不固定,

由此我想到了使用联合体的数据类型,但是联合体只是共用一个区域,指针不方便指到指定的位置,比较麻烦。

后面通过AI的提示使用void *类型解决

在C语言中,void *address;表示一个指向任意类型的指针。这里使用void *address;是为了使结构体能够存储不同类型的变量地址。通过使用void *类型,我们可以将任何类型的指针赋值给这个指针,然后在函数内部根据结构体中的类型信息进行类型转换,从而实现对不同类型变量的操作。

简易的示例代码如下

// 定义结构体
typedef struct {
    char name[20];
    char type; // 'i'表示int, 'f'表示float, 'd'表示double
    double step;
    void *address;
} VariableInfo;

在操作过程中只要根据不同类型的数据进行强制转换类型,指明类型即可!

// 函数实现
void add_step(VariableInfo var_info) {
    switch (var_info.type) {
        case 'i':
            *((int *)var_info.address) += (int)var_info.step;
            break;
        case 'f':
            *((float *)var_info.address) += (float)var_info.step;
            break;
        case 'd':
            *((double *)var_info.address) += (double)var_info.step;
            break;
        default:
            printf("Unsupported type: %c
", var_info.type);
            break;
    }
}

简单记录一下,睡觉了

上一篇 下一篇

猜你喜欢

热点阅读