最近在写一个调参系统,为了方便变量的传入和修改,遇到了个问题,
不同的类型变量传入,我使用结构体数组列表来储存,但是其中变量的指针,我不知道要怎么处理,因为变量类型不固定,
由此我想到了使用联合体的数据类型,但是联合体只是共用一个区域,指针不方便指到指定的位置,比较麻烦。
后面通过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;
}
}
网友评论