c - 如何定义包含指向自身的指针的 typedef 结构?

标签 c struct typedef

我正在用 C 编写一个 LinkedList,下面的代码代表我的节点定义。

typedef struct {
    int value;
    struct Node* next;
    struct Node* prev;
} Node;

我理解(或认为我理解)struct Nodetypedef struct Node 不同。尽管我的代码可以按预期编译和运行,但是,我在分配 nextprev 时收到很多警告(警告:从不兼容的指针类型分配)。我猜这与我在 Node 结构中定义它们的方式有关。 我上传了完整的源here

那么,如果这确实是问题所在,我应该如何在 typedef struct Node 中定义 nextprev

我担心这可能是转贴,但找不到我要找的东西。谢谢。

最佳答案

您需要按以下顺序进行:

typedef struct Node Node;

struct Node
{
  int value;
  Node *next;
  Node *prev;
};

这并没有完全按照您的要求进行,但它解决了问题,并且通常是这样做的。我认为没有更好的方法。

这种前向声明还有第二种用途,即数据隐藏。如果列表是在库中实现的,您可以在公共(public)头文件中只包含 typedef,以及如下函数:

Node * list_new(void);
Node * list_append(Node *head, Node *new_tail);
size_t list_length(const Node *head);

这样,库的用户就无法轻松访问库的内部结构,即 Node 结构的字段。

关于c - 如何定义包含指向自身的指针的 typedef 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3988041/

相关文章:

c++ - 如何在 linux 中将 conio.h 添加到 nvcc

c - 初始化结构体的成员

c - c中的嵌套结构

c# - 从 C# : Of structs, 字符串和 wchar_t 数组调用 C++ dll 函数

c - 无法在辅助接口(interface)上接收 UDP/IPv6 数据包

c - "Arrays = Pointers"*令人震惊*。许多年后 : "Actually, they don' t"*mind blown again*

c - 使用 free() 后字符串变成垃圾

c - 不透明的 C 结构 : various ways to declare them

c - typedef 一个结构在它被声明之前

c++ - "using"能否在所有情况下完全替换 "typedef"?