关于定义结构体别名时 是否加*

在C语言中,使用typedef来定义结构体类型及其指针的别名时,NodeLinkList的声明方式有所不同,这是因为你对它们的目的和用途有不同的设定。

首先,看一下你的代码:


	typedef struct { 

	int data; 

	int lenght; // 注意:这里应该是 length,而不是 lenght,可能是一个拼写错误 

	struct Node *next; // 注意:这里需要使用 struct Node,因为此时 Node 还没有被定义为一个类型别名 

	} Node, *LinkList;
  1. Node的定义
    • 在这个结构体定义中,Node是结构体的标签(tag),它用于在结构体内部或外部引用这个结构体的类型。
    • typedef的上下文中,Node被同时定义为这个结构体的类型别名。这意味着在typedef之后,你可以使用Node来声明这种类型的变量,而不需要再写struct关键字。
  2. LinkList的定义
    • *LinkListtypedef定义中的第二部分,它声明了一个新的类型别名LinkList,这个别名是指向struct Node的指针的类型。
    • 这里的*表示LinkList是一个指针类型,指向struct Node类型的对象。
    • 因此,当你使用LinkList来声明变量时,你实际上是在声明一个指向Node结构体的指针。

为什么Node没有*LinkList*呢?

  • Node没有*是因为你想要定义一个结构体的类型别名,而不是一个指针类型。这样,你就可以使用Node来创建结构体的实例。
  • LinkList*是因为你想要定义一个指向结构体的指针的类型别名。这样,当你使用LinkList来声明变量时,你得到的是一个指向结构体的指针,这在处理链表等数据结构时非常有用。

总结:

  • Node是结构体的类型别名,用于创建结构体的实例。
  • LinkList是指向结构体的指针的类型别名,用于处理链表中的节点。

另外,请注意在结构体定义中next成员的类型应该是struct Node *而不是Node *,因为在typedef之前Node还没有被定义为一个类型别名,它仍然是一个结构体标签。但在typedef之后,你可以在结构体的定义中直接使用Node *作为next的类型,因为此时Node已经被定义为一个类型别名了。不过,为了保持代码的清晰和一致性,许多程序员会选择在结构体定义中始终使用struct Node *

猜你喜欢

转载自blog.csdn.net/m0_61338837/article/details/143081011