我需要创建一个完全通用的链表,它可以包含枚举指定的任何类型的数据......
列表的一个节点具有以下结构:
__________________
|_____|_____|_____|
第一个字段是 sizeof(nodeType) 字节,包含存储的信息类型。下一个字段的地址包含信息变量的地址。下一个字段具有下一个节点的地址,它可以是一个简单的节点或另一个链表。
基本上,我有一个 nodeType 枚举为:
typedef enum{
STRING, INT, NIL, LIST
} nodType;
我已经为这样的节点指针分配了内存:
nodeType* node = malloc(sizeof(nodeType) + 2*sizeof(char*));
第一个 sizeof(nodeType) 字节包含存储的信息类型。我通过表达式为它分配了值 STRING:
*node = STRING;
现在,我希望下一个 sizeof(char*) 字节存储 char* 指针的地址。(机器上的所有指针都具有相同的大小?(是的,根据我的说法)).. 所以,我给它分配了一个值,例如:
char* str = strdup("Hello");
(char**)(char*(node) + sizeof(nodeType)) = &str;
但是 GCC 会标记一个错误,因为赋值运算符的 LHS 不是左值。我需要为该地址分配值才能继续构建该列表。除了使用结构之外,在 c 中是否有一些优雅的方法可以做到这一点?