如何更改结构中的指针变量?

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 listNodestruct listNode *next是声明一个变量,next,它的类型确实是指向一个类型为struct listNode的值的类型。所以你应该那样做。

  NODE newNode = {
  .next = null,
  .data = data
  }

此外,这就是结构在内存中的样子。您可以记住这一点以消除混淆。这清楚地指出了为什么你不能那样做。 (由于此处的结构布局,结构中的下一个成员不能单独取消引用)。

|--------------|
| newNode.next | &newNode
|--------------|
| newNode.data |
|--------------|

更新回复:检查编辑摘要。