c - 结构标签和花括号后面的标签有什么区别?

标签 c struct typedef

<分区>

有人可以为我解释这段代码吗?

typedef char AirportCode[4];

typedef struct NodeTag{
  AirportCode Airport;
  struct NodeTag *link;
}Node;

Node *L;

这是我的数据结构类中的一段代码。这段代码的实现是为了将数据保存在链表节点中。我想了解的是 NodeTag 通常的用途是什么?是不是因为缺少更好的词而希望结构在其自身内部进行另一次迭代? NodeTag 和花括号后面的内容(在本例中为“Node”)有什么区别?

最佳答案

您在这里将两件事合而为一:

(1) 结构声明:

struct NodeTag{
  AirportCode Airport;
  struct NodeTag *link;
};

这将要求您像这样声明您的节点:

struct NodeTag *nt; 

结构定义的右大括号之后的任何内容都将声明该类型的变量。

struct foo {int n;} a_global_variable;

使用 (2) typedef:

typedef ... Node;

这让你可以简单地说:

Node *n; 

但是,在 struct 声明中,由于 typedef 尚不存在,您仍必须使用 struct NodeTag *nt 而不是 Node *n

关于c - 结构标签和花括号后面的标签有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33968167/

相关文章:

c - 警告 : format not a string literal, 未检查参数类型

c - C结构序列化中的结构填充影响(保存到文件)

c - 通过低级 I/O 读取结构

c++ - "typedef"类型名称可以像 "struct"定义那样声明指向结构的指针吗?

c - 错误: dereferencing pointer to incomplete type in main file

c - 给出的代码用于给定键的旋转数组

c - 如何在 C 中声明由输入数量设置的动态二维数组

c - 包含结构的自由链表包含结构

go - 如何在 Go 模板中访问数组第一个索引的值

部分模板实例化中的 C++ Typedef