c - 将结构用于链表与将它们用于点类型变量

标签 c list struct

如果我想创建一个可以容纳 2 个 double 值的变量 Point 并且我想避免每次使用它时都必须编写结构,我可以简单地使用:

typedef struct{
    double x,y; 
}Point;

但是当我想制作一个链表时,声明必须是这样的:

typedef struct Node Node; // (2)
struct Node{
    int d;
    struct Node * next;   
};

不是这样的:

typedef struct{
    int d;
    struct Node * next;   
}Node;

为什么声明必须这样,为什么要输入两次“Node”,见(2)。

最佳答案

typedef struct Node Node;

此语句指示编译器将 Node 视为与 struct Node 同名,这就是为什么它必须两次包含“Node”一词.

声明也不一定非要这样,第二个版本也是正确的。

struct 声明根本不需要包含 typedef,它只需要为类型分配一个新名称并且通常与 struct 一起使用 声明,以避免需要一遍又一遍地键入单词 struct

关于c - 将结构用于链表与将它们用于点类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32102798/

相关文章:

python - 将数字分成数字并使用python将它们保存在列表(数组)中

list - 如何将列表与特定键/值作为主机变量进行组合/匹配

c++ - 结构值未输出到屏幕

c - 关于 GCC 编译器和链接器的问题

java - Sphinx4 与 Pocketsphinx

c - C中的usleep()是否实现为忙等待?

c - 使用 C 程序合并 n 个文件

java - 为什么java中Collections的fill(),copy(),reverse(),shuffle()是这样实现的

c# - 如何将包含数组的结构转换为字节数组?

c - 持有相同 Node 结构地址的两个指针打印不同的值