plain C 有很好的特性 - void 类型指针,它可以用作指向任何数据类型的指针。
但是,假设我有以下结构:
struct token {
int type;
void *value;
};
其中 value 字段可能指向 char 数组、int 或其他内容。
所以在分配这个结构的新实例时,我需要:
1) 为这个结构分配内存;
2)为值分配内存并将其分配给值字段。
我的问题是 - 有没有办法声明“类型为 void 的数组”,它可以转换为任何其他类型,如 void 指针?
我想要的只是使用具有转换为任何类型的能力的“灵活成员数组”(在 C99 标准的 6.7.2.1 中描述)。
像这样的东西:
struct token {
int type;
void value[];
};
struct token *p = malloc(sizeof(struct token) + value_size);
memcpy(p->value, val, value_size);
...
char *ptr = token->value;
我想将 token->value 声明为 char 或 int 数组并稍后转换为所需的类型将完成这项工作,但对于稍后将阅读此代码的人来说可能会非常混乱。