【问题标题】:Unable to understand "typedef" and pointer usage in structs (C)无法理解结构中的“typedef”和指针用法(C)
【发布时间】:2019-10-02 15:07:32
【问题描述】:

我的问题与 CI 学习列表的早期阶段有关,无论是否与最简单的代码有关,我都无法在任何地方找到我的问题的明确答案。(我是将在一个非常简单的代码上给你一个我不太清楚的例子,只是为了让你了解我失去理解的地方。这与我对更复杂的问题的问题相同。

   struct node{
       int data;
       struct node *next;
   };

我得到了什么数据和下一个用作变量,但我不明白:struct node *next 的真正含义。我们是否创建一个名为 next 的新结构,它具有新数据和下一个成员?我也没有得到下一个 * 的用法。

**下面是一个旨在创建选项卡并将站点地址添加到这些选项卡的代码。类似于浏览器会做的事情。信息代码中的 InfoSession。我正在创建的列表是一个双链表。**但我不明白两件事: 1)例如,TabNodePtr LastTab 到底是什么意思? LastTab 现在是一个新结构,具有上述所有内容:

TabNodePtr PrevTab, NextTab;
SiteNodePtr FirstSite;
SiteNodePtr CurrSite;

作为成员?与 SiteNodePtr 相同。我不明白它们是如何联系在一起的,现在对我来说都是一团圣诞花环。 2)为什么我们对成员使用指针?并且不要只使用 TabNode LastTab ?指针在哪里产生差异,我们必须添加它们?

   typedef struct TabNode *TabNodePtr;
    typedef struct SiteNode *SiteNodePtr;

    struct InfoSession {
        TabNodePtr FirstTab;
        TabNodePtr LastTab;
        TabNodePtr CurrTab;
    };

    struct TabNode {    
        TabNodePtr PrevTab, NextTab;
        SiteNodePtr FirstSite;
        SiteNodePtr CurrSite;
    };

    struct SiteNode{
        SiteNodePtr PrevSite, NextSite;
        TabNodePtr UpTab;
    };

【问题讨论】:

标签: pointers data-structures struct linked-list typedef


【解决方案1】:

你还有很长很长的路要走......

如果我能在你学习 C 语言的过程中帮助你一点,让我试试吧。

struct node *next 的真正含义是什么。我们是否创建一个名为 next 的新结构,其中包含新数据和 next 成员?我也没有得到 *next 中的用法。

struct node *next;

该语句声明了一个名为next 的变量,它的类型为struct node *,这意味着next 是一个指针,它可以指向struct node 类型的地址。
例如在语句int *p; 中,变量p 的类型为int *,这意味着p 是一个可以指向int 的指针。 [对于指针,检查thisthis 或谷歌它或参考任何好书]

您听说过 C 中的自引用结构吗?
自引用结构是一种结构,其中一个成员是指向结构本身的指针。

所以,在这个结构声明中:

       -------------------------------------------------
       |                                               |
       v                                               |
  struct node{                                     -----------
      int data;                                    |         |
      struct node *next;   // next is a pointer to struct node, i.e. pointer to self
  };

struct node 是一个自引用结构。 [有关自引用结构的更多详细信息,请检查this 及其用法检查this]。

但我不明白两件事:1)例如,TabNodePtr LastTab 的真正含义是什么?LastTab 现在是一个具有上述所有内容的新结构......

首先,仔细阅读 C 中的指针(更具体地说是指向结构的指针)。

typedef 用于为其他数据类型创建别名[阅读有关 typedef here 和 typedef a struct here 的更多信息或参考任何好书。]

所以,当你写作时

typedef struct TabNode *TabNodePtr;

这意味着,现在TabNodePtrstruct TabNode * 类型的别名,您可以使用TabNodePtr 来声明struct TabNode * 类型的变量。

所以,在上面的typedef....声明之后,当你写

TabNodePtr xyz;

和这个完全一样

struct TabNode *xyz;

在您的代码中:

TabNodePtr LastTab;

这声明了struct TabNode * 类型的变量LastTab,这意味着LastTab 是一个指向struct TabNode 的指针。

所以,这是

    struct InfoSession {
        TabNodePtr FirstTab;
        TabNodePtr LastTab;
        TabNodePtr CurrTab;
    };

和这个完全一样

    struct InfoSession {
        struct TabNode *FirstTab;
        struct TabNode *LastTab;
        struct TabNode *CurrTab;
    };

SiteNodePtr 也是如此,它是 struct SiteNode * 的别名。

2) 为什么我们要为成员使用指针?而且不要只使用 TabNode LastTab 之类的?指针在哪里产生差异,我们必须添加它们?

Why do we use pointers for the members?Why do we use pointers? - 对于不了解或对 C 中的指针知之甚少的人以及大多数初学者这是一个让他们很困惑的话题。但是相信我,一旦您获得了有关指针的正确知识并学会使用它们,您将永远不会回头。指针是一种不可抗拒的非常强大的编程结构。要理解 - Why do we use pointers....,首先您需要了解指针。初学者可以参考thisthis

快乐学习..享受..

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-28
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 1970-01-01
    相关资源
    最近更新 更多