有人可以帮助我了解这段代码的意思吗?
typedef struct node{
int data;
struct node* next;
}test;
根据我的理解,typedef只是一种保存字符的方法,而不是每次都键入“ struct node”,在这种情况下,我们可以通过键入“ test”来实现。但是,如何在结构节点内有另一个“结构节点*下一个”?我以为结构必须具有结构成员,那么在此代码中“ struct node * next”将完成什么工作? “ struct node * next”没有结构成员,那么编写struct的意义是什么?
谢谢。
答案 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"