了解结构内部的结构

时间:2018-07-31 22:17:31

标签: c struct

有人可以帮助我了解这段代码的意思吗?

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

根据我的理解,typedef只是一种保存字符的方法,而不是每次都键入“ struct node”,在这种情况下,我们可以通过键入“ test”来实现。但是,如何在结构节点内有另一个“结构节点*下一个”?我以为结构必须具有结构成员,那么在此代码中“ struct node * next”将完成什么工作? “ struct node * next”没有结构成员,那么编写struct的意义是什么?

谢谢。

3 个答案:

答案 0 :(得分:1)

它只是指向另一个node的指针。之所以需要前面的struct是因为typedef在声明该结构之后才有效。

您可以使用该指针创建一个链接列表,其中每个node都包含一个指向列表中下一个node的指针。

This answer详细介绍了如何(以及为什么)进行这样的设置。它还详细介绍了为什么(在您的示例中)必须在struct指针前面使用node标识符。

您可能还想考虑是否要对结构进行类型定义。它保存了击键,但也隐藏了它是用户定义类型的事实。 This answer对此有更详细的说明。

答案 1 :(得分:0)

通常将结构组合在一起以形成链接列表和树等。这是通过包含指向子节点或父节点的指针来实现的。在您的情况下,它指向列表中的下一个结构。

答案 2 :(得分:0)

  

在结构节点内如何有另一个“结构节点*下一个”?

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的意义是什么?

您可以使用->运算符访问指向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"