如何更改结构中的指针变量?
How to change pointer variables within a struct?
所以我正在尝试实现一个链表,并且每个节点都有这个结构:
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
}
我做错了什么?
您混淆了指针声明语法和指定初始化语法。成员字段可以声明为指针类型。使用指定的初始值设定项时,只需命名该字段。另请注意,它们以逗号分隔。
NODE newNode = {
.next = null,
.data = data
};
正式地,这称为 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 |
|--------------|
更新回复:检查编辑摘要。
所以我正在尝试实现一个链表,并且每个节点都有这个结构:
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
}
我做错了什么?
您混淆了指针声明语法和指定初始化语法。成员字段可以声明为指针类型。使用指定的初始值设定项时,只需命名该字段。另请注意,它们以逗号分隔。
NODE newNode = {
.next = null,
.data = data
};
正式地,这称为 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 |
|--------------|
更新回复:检查编辑摘要。