我的问题与CI中学习列表的早期阶段有关,无论是否与最简单的代码有关,我都无法在任何地方找到对我的问题的明确答案。(会给你一个例子,说明我在一个非常简单的代码上并没有清楚地了解到什么,只是为了让你失去我的理解。这是我遇到的更复杂的问题。)
struct node{
int data;
struct node *next;
};
我得到了什么数据,next用作变量,但我没有得到: struct node * next的真正含义。我们是否创建一个名为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;
};
答案 0 :(得分:1)
您还有很长的路要走。...
如果可以在您学习C语言的过程中有所帮助,请让我尝试一下。
struct node *next
的真正含义。我们是否创建一个名为next
的新结构,该结构具有新数据和next
成员?我还没有得到*
next
中的用法。
struct node *next;
此语句声明一个名为next
的变量,其类型为struct node *
,这意味着next
是一个指针,可以指向类型为struct node
的地址。
例如在语句int *p;
中,变量p
的类型为int *
,这意味着p
是可以指向int
的指针。 [有关指针,请查看this或this或在Google上搜索或参考任何好书] 。
您是否听说过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结构here的更多信息,或参阅任何好书。]
所以,当你写
typedef struct TabNode *TabNodePtr;
这意味着,TabNodePtr
现在是struct TabNode *
类型的别名,您可以使用TabNodePtr
来声明类型struct TabNode *
的变量。
因此,在上面的typedef....
语句之后,当您编写
TabNodePtr xyz;
与此完全相同
struct TabNode *xyz;
在您的代码中:
TabNodePtr LastTab;
这声明了类型为LastTab
的变量struct TabNode *
,这意味着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和C指针的人来说,这是一个很自然的问题对于大多数初学者来说,这是一个使他们非常困惑的话题。但是,只要您对指针有了适当的了解并学会使用它们,请相信我,您将永远不会回头。指针是一种不可抗拒的非常强大的编程结构。要理解- Why do we use pointers....
,首先,您需要了解有关指针的知识。对于初学者,您可以参考this和this。
学习愉快...享受..