了解结构内部的结构

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"

【讨论】:

以上是关于了解结构内部的结构的主要内容,如果未能解决你的问题,请参考以下文章

一文帮你了解小型直流有刷电机内部结构

了解如何从内部函数更新原始二维数组

ruby 你有一个深层嵌套的结构,你想从内部深入了解一个值吗?如果路径坏了,不在乎?用digg!我特别喜欢这个

ArrayList和LinkedList 内部结构分析

不了解Blockchain中的内部零件,谈何认知

「小程序JAVA实战」微信小程序工程结构了解