【发布时间】:2017-11-17 18:31:09
【问题描述】:
所以我正在尝试实现一个链表,并且每个节点都有这个结构:
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
}
我做错了什么?
【问题讨论】:
-
*是 type 的一部分,而不是字段名的一部分,因此您只需初始化.next,而不是.*next。诚然,struct node *next的语法在这方面令人困惑,事实上,许多人更喜欢写成struct node* next,以明确这一点。 -
那么在这种情况下,我设置的 .next 值应该是列表中下一个节点的内存地址?还是节点本身?
-
我还想指出,当您设置
newNode.data时,您可能不应该取消引用data。如果data是一个指针,那么传入该指针可能就是你想要的。 -
@Ctx 我不同意,
struct node* next, prev;实际上更令人困惑,因为如果*属于该类型,那么prev的类型是什么? -
@IharobAlAsimi 哦,我们玩琐事? ;) prev 的类型是
struct node。
标签: c pointers struct designated-initializer