鱼C论坛

 找回密码
 立即注册
查看: 1567|回复: 9

[已解决]结构体定义

[复制链接]
发表于 2023-7-10 16:45:31 | 显示全部楼层
当我们使用typedef关键字定义结构体时,可以同时定义结构体的别名。下面是对您提供的代码的解释:
  1. typedef struct LNode {
  2.     int data;
  3.     struct LNode* next;
  4. } LNode, *LinkList;
复制代码

这段代码定义了一个结构体类型struct LNode,它包含了一个整型成员data和一个指向另一个LNode类型结构体的指针next

接下来的一行代码LNode, *LinkList是为这个结构体类型定义了两个别名。具体来说,LNode是一个别名,可以用来替代struct LNode类型的名称,而*LinkList是另一个别名,可以用来表示指向LNode类型的指针。

使用这些别名可以使代码更简洁、易读,并且方便引用这些结构体或指针类型。例如,我们可以使用LNode来声明结构体变量,如LNode node1;,也可以使用LinkList来声明指向结构体的指针变量,如LinkList list = NULL;

希望这样解释清楚了这段代码,如果还有疑问,请随时追问!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-7-10 20:12:23 | 显示全部楼层
ynnh 发表于 2023-7-10 17:07
为什么第二个元素是用 struct LNode 而不是 直接用struct呢(这两个有什么不一样),这里的struct LNode  ...


在这里,我们需要深入理解一下 struct 和 typedef 的关系。

首先,struct 是 C 语言中用于定义复合数据类型的关键字。当我们定义一个结构体时,我们首先使用 struct 关键字,然后给它一个标签名,如 struct LNode。这个标签名可以在后续的代码中用于声明这种结构体类型的变量,但是需要注意,当我们使用 struct LNode 时,必须在前面加上 struct 关键字。

例如:


  1. struct LNode node1;
复制代码

然而,这种写法在实际编程中可能会显得有些繁琐。因此,我们经常使用 typedef 来为这种结构体类型定义一个新的简洁名称,也就是别名。在你给出的代码中,typedef struct LNode 定义了一个名为 LNode 的别名,这样我们就可以直接用 LNode 代替 struct LNode 来声明变量了。

例如:

  1. LNode node2; // 等同于 struct LNode node2;
复制代码

至于你的问题,为什么第二个元素是用 struct LNode 而不是 直接用 struct 呢?这是因为在结构体定义中,当我们使用指针指向自身类型时,结构体尚未完全定义,因此我们需要使用 struct LNode 明确指出它指向的是什么类型的结构体。如果只写 struct,编译器将无法确定它到底指向哪种类型的结构体。

举个例子,如果我们有两个结构体类型 struct A 和 struct B,我们不能仅仅用 struct 来表示它们,而需要用 struct A 和 struct B 分别表示。

所以,结论是:在这里,struct LNode 可以看作是一种数据类型,它表示一个 LNode 结构体类型。在结构体内部,我们需要使用 struct LNode 而不是仅仅使用 struct 来表示指针指向的具体类型。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-22 16:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表