plain C具有很好的特性 - void類型指針,可用作指向任何數據類型的指針。
但是,假設我有以下結構:數組類型void
struct token {
int type;
void *value;
};
其中value字段可能指向字符數組,或爲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;
我想令牌的聲明>值作爲char或int數組和鑄造所需類型以後會做這項工作,但可以非常混亂的人誰都會閱讀代碼稍後。
雙指針? – 2011-04-25 22:06:39
使用'char []'是好的恕我直言,因爲'sizeof(char)== 1',你永遠不會感到驚訝。您可能需要考慮宏以正確的類型訪問'p-> value'。 – 2011-04-25 22:20:51