了解结构内部的结构
Posted
技术标签:
【中文标题】了解结构内部的结构【英文标题】:Understanding structure inside a structure 【发布时间】:2019-01-08 09:52:32 【问题描述】:谁能帮我理解这段代码的含义?
typedef struct node
int data;
struct node* next;
test;
据我了解,typedef 只是一种保存字符的方法,而不是每次都输入'struct node',在这种情况下我们可以通过输入'test'来做到这一点。但是,结构节点内怎么会有另一个“结构节点*下一个”?我认为结构必须有结构成员,那么'struct node* next'在这段代码中完成了什么? 'struct node* next'没有结构成员,那么写struct有什么意义呢?
谢谢。
【问题讨论】:
结构可以有指针或其他结构作为成员。例如,如果您有一个链表,则指针仅指向下一个元素。 What exactly is a C pointer if not a memory address?的可能重复 结构内部没有结构。这就是每本 C 教科书中所解释的所有 C 基础知识。 【参考方案1】:它只是指向另一个node
的指针。前面需要 struct
的原因是因为 typedef
在声明结构之前无效。
您可以使用该指针创建一个链表,其中每个node
都包含一个指向链表中下一个node
的指针。
This answer 更详细地介绍了您如何(以及为什么)进行这样的设置。它还详细说明了为什么有必要(在您的示例中)在 node
指针前面使用 struct
标识符。
您可能还想考虑是否要对您的结构进行 typedef。它节省了击键,但它也隐藏了它是用户定义类型的事实。 This answer 对此进行了详细介绍。
【讨论】:
感谢您的信息。当您说它是指向另一个节点的指针时,这是否意味着我们创建了一个指向名为“next”的节点的指针? @JustinSong 下一个节点不称为next
。相反,node
内部的成员变量称为next
,它可以用来指向任何其他node
。这是一个微妙但重要的区别。在担心结构中的指针之前,您可能想退后一步研究指针是如何工作的。【参考方案2】:
通常将结构组合成链表和树等。这是通过包含指向子节点或父“节点”的指针来实现的。在您的情况下是指向列表中的下一个结构。
【讨论】:
【参考方案3】:结构节点内怎么会有另一个'struct node* next'?
struct node *
是指向struct node
用户定义数据类型的指针。你可以叫它pointer to itself
。结构可以有指向自身或其他结构的指针作为成员。
C for Programmers a Deitel book
说:
结构不能包含自身的实例。例如,一个 struct employee 类型的变量不能在定义中声明 对于结构员工。然而,指向 struct employee 的指针可能是 包括在内。
要详细了解为什么结构不能包含自身的实例,您可以阅读此link。
typedef 只是一种保存字符的方法,而不是每次都输入'struct node',在这种情况下我们可以通过输入'test'来做到这一点。
如果没有前向声明,结构名称在结构定义中仍然有效(即您可以使用结构 A),但 typedef 在 typedef 定义完成之前不可用。您可以通过here阅读更多内容。
我认为结构必须有结构成员,那么'struct node* next'在这段代码中完成了什么? 'struct node* next'没有结构体成员,那么写struct有什么意义呢?
您可以使用->
运算符访问指向结构节点的指针的成员。考虑一个小型链接程序:
test a;
test b;
a.data = 5;
b.data = 10;
b.next = NULL;
a.next = &b; // A linked list has been formed.
printf("Data of first node is %d and second node is %d\r\n", a.data, a.next->data); // It will print "Data of first node is 5 and second node is 10"
【讨论】:
以上是关于了解结构内部的结构的主要内容,如果未能解决你的问题,请参考以下文章