[英]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
};
正式地,這稱為C99以來引入的指定初始化器 。
首先,您應該實現指針類型。 struct listNode next;
是聲明一個變量next
,其類型為struct listNode
。 struct listNode *next
將聲明一個變量next
,其類型的類型確實是指向類型為struct listNode
的值的類型。 所以你應該那樣做。
NODE newNode = {
.next = null,
.data = data
}
而且,這就是內存中的結構。 您可能還記得這消除了混亂。 這清楚地指出了為什么您不能這樣做。 (由於此處的結構布局,無法單獨取消引用結構中的next成員)。
|--------------|
| newNode.next | &newNode
|--------------|
| newNode.data |
|--------------|
更新的響應:檢查編輯摘要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.