执行以下操作是否很常见:
void *x = (void *) "one";
void *y = (void *) 2;
void *z = (void *) NULL;
而不是:
char * x = "one";
int y = 2;
我问这个问题的原因是能够调用可以接受多种类型的函数。例如,在 javascript 中可以使用各种元素的连接。在某种程度上,使用 (void *)
似乎只是表示“任何类型”的简单方法。
最佳答案
不,因为你不能取消引用 void 指针:你必须知道存储的是什么类型,这使得这个想法毫无用处。
您可能正在寻找的是 variant type .
enum type {
CHAR, INT, DOUBLE, STR
};
typedef struct {
union {
char c;
int i;
double d;
char *str;
};
enum type t;
} variant;
void displayGenericObjec(variant v)
{
switch (v.t) {
case CHAR:
putchar(v.c);
break;
case INT:
printf("%d", v.i);
break;
case DOUBLE:
printf("%f", v.d);
break;
case STR:
printf("%s", v.str);
break;
}
}
variant x;
x.t = INT;
x.i = 42;
displayGenericObject(x);
这不是一个非常实用的解决方案,但它适用于只需要几种类型的简单代码。
关于c - 声明 void 指针以将类型处理推向下游,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58177882/