是否经常执行以下操作:
void *x = (void *) "one";
void *y = (void *) 2;
void *z = (void *) NULL;
而不是:
char * x = "one";
int y = 2;
我问这个的原因是能够调用可以接受多种类型的函数。例如,可在javascript中使用各种元素的组合。似乎使用(void *)
只是表示“任何类型”的简单方法。
否,因为您不能取消引用空指针:您必须知道要存储的类型,使该想法无用。
您可能正在寻找的是variant type。
enum type {
CHAR, INT, DOUBLE, STR
};
typedef struct {
union {
char c;
int i;
double d;
char *str;
};
enum type t;
} variant;
这不是一个非常实用的解决方案,但适用于仅需要几种类型的琐碎代码。