所以我试图实现一个链表,我为每个节点都有这个结构:
typedef struct listNode {
struct listNode *next;
void *data;
} NODE;
以前,我做过一个航天器结构看起来像这样的游戏:
typedef struct {
int height;
int width;
} SPACECRAFT;
我可以通过
创造一个新的太空船 SPACECRAFT plyrShip = {
.width = //someInt;
.height = //someInt;
};
虽然对于节点,变量是指针,并且不允许我通过
创建新节点 NODE newNode = {
.*next = null;
.*data = *data //function has *data as parameter so I can pass it
//into the node
}
我做错了什么?
答案 0 :(得分:2)
您已将指针声明语法和指定的初始化语法混为一谈。可以将成员字段声明为指针类型。使用指定的初始值设定项时,只需为该字段命名。另请注意,它们以逗号分隔。
NODE newNode = {
.next = null,
.data = data
};
答案 1 :(得分:2)
正式地说,这被称为Designated Initializer,这是自C99以来引入的。
首先,你应该实现指针类型。 struct listNode next;
是声明一个变量next
,其类型为struct listNode
。 struct listNode *next
是声明一个变量next
,其类型是指向类型为struct listNode
的值的类型。所以你应该这样做。
NODE newNode = {
.next = null,
.data = data
}
而且,这就是结构在内存中的样子。你可以记住这一点,以消除混乱。这清楚地指出了为什么你不能这样做。 (由于此处的结构布局,结构中的下一个成员不能单独解除引用。)
|--------------|
| newNode.next | &newNode
|--------------|
| newNode.data |
|--------------|
更新的响应:检查编辑摘要。