簡體   English   中英

如何更改結構中的指針變量?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM