Pointers “无法理解”;typedef";结构中的指针用法(C)

Pointers “无法理解”;typedef";结构中的指针用法(C),pointers,data-structures,struct,linked-list,typedef,Pointers,Data Structures,Struct,Linked List,Typedef,我的问题与C语言中学习列表的早期阶段有关。无论是否需要使用最简单的代码,我都无法在任何地方找到我问题的明确答案。(我将给你们一个例子,说明我在一个非常简单的代码中不清楚的地方,只是为了让你们明白我的理解。这与我在更复杂的代码中遇到的问题是一样的。) struct节点{ int数据; 结构节点*下一步; }; 我得到了数据和next用作变量的内容,但我没有得到:struct node*next的真正含义是什么。我们是否创建了一个名为next的新结构,它包含新数据和next成员?我也没有得到的是n

我的问题与C语言中学习列表的早期阶段有关。无论是否需要使用最简单的代码,我都无法在任何地方找到我问题的明确答案。(我将给你们一个例子,说明我在一个非常简单的代码中不清楚的地方,只是为了让你们明白我的理解。这与我在更复杂的代码中遇到的问题是一样的。)

struct节点{
int数据;
结构节点*下一步;
};
我得到了数据和next用作变量的内容,但我没有得到:struct node*next的真正含义是什么。我们是否创建了一个名为next的新结构,它包含新数据和next成员?我也没有得到的是next中的*用法

**下面是一段代码,旨在创建选项卡并向这些选项卡添加站点地址。类似于borwser所做的。InfoSession在信息代码中。我正在创建的列表是一个双链接列表。**但我不了解两件事: 1) 例如,TabNodePtr LastTab的真正含义是什么?LastTab现在是一个新的结构,它包含了上述所有内容:

TabNodePtr PrevTab,NextTab;
SiteNodePtr FirstSite;
SiteNodePtr CurrSite;
作为成员?与SiteNodePtr s相同。我不明白它们是怎么联系在一起的。现在对我来说,这都是一团圣诞花环。 2) 为什么我们要为成员使用指针?而不仅仅是TabNode LastTab?指针在哪里产生差异,我们必须添加它们

typedef结构TabNode*TabNodePtr;
typedef struct SiteNode*SiteNodePtr;
结构信息会话{
TabNodePtr FirstTab;
TabNodePtr LastTab;
TabNodePtr CurrTab;
};
结构TabNode{
TabNodePtr PrevTab,NextTab;
SiteNodePtr FirstSite;
SiteNodePtr CurrSite;
};
结构站点节点{
SiteNodePtr PrevSite,NextSite;
TabNodePtr-UpTab;
};
你还有很长很长的路要走

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

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

此语句声明一个名为
next
的变量,该变量的类型为
struct node*
,这意味着
next
是一个指针,可以指向
struct node
类型的地址
例如,在语句
int*p中
,变量
p
的类型为
int*
,这意味着
p
是一个可以指向
int
的指针。[有关指针,请查看或搜索它或参考任何好书]

你听说过C语言中的自指结构吗 自指结构是指其中一个成员是指向结构本身的指针的结构。

因此,在这个结构声明中:

       -------------------------------------------------
       |                                               |
       v                                               |
  struct node{                                     -----------
      int data;                                    |         |
      struct node *next;   // next is a pointer to struct node, i.e. pointer to self
  };
struct节点
是一个自引用结构。[有关自引用结构检查及其用法检查的更多详细信息]

但我不明白两件事:1)例如,
TabNodePtr LastTab
到底意味着什么?是不是一个新的结构,现在它已经具备了上述所有功能

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

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

所以,当你写作的时候

typedef struct TabNode *TabNodePtr;
TabNodePtr xyz;
这意味着,现在,
TabNodePtr
struct TabNode*
type的别名,您可以使用
TabNodePtr
声明类型为
struct TabNode*
的变量

因此,在上面的
typedef….
语句之后,当您编写

typedef struct TabNode *TabNodePtr;
TabNodePtr xyz;
和这个一模一样

struct TabNode *xyz;
    struct InfoSession {
        struct TabNode *FirstTab;
        struct TabNode *LastTab;
        struct TabNode *CurrTab;
    };
在代码中:

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

所以,这是

    struct InfoSession {
        TabNodePtr FirstTab;
        TabNodePtr LastTab;
        TabNodePtr CurrTab;
    };
和这个一模一样

struct TabNode *xyz;
    struct InfoSession {
        struct TabNode *FirstTab;
        struct TabNode *LastTab;
        struct TabNode *CurrTab;
    };
SiteNodePtr
也是如此,它是
struct SiteNode*
的别名

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

为什么我们要为成员使用指针?
为什么我们要使用指针?
-对于不知道或对C中的指针知之甚少的人来说,这是一个非常自然的问题,对于大多数初学者来说,这是一个让他们非常困惑的话题。但是相信我,一旦你获得了关于指针的正确知识并学会使用它们,你就再也不会回头了。指针是一种不可抗拒的非常强大的编程结构。要理解-
为什么要使用指针…
,首先您必须了解指针。对于初学者,您可以参考和


快乐学习。。。。享受..

看来你真的需要读几本入门书,因为它们应该告诉你你想知道的一切。可能是