什么是C中的自引用结构?

Aka*_*era 0 c structure linked-list

struct LinkedList  
{  
    int data;
    struct LinkedList *next;
};
Run Code Online (Sandbox Code Playgroud)

在代码中,在定义中struct LinkedList有一个指向结构本身的指针.

它是如何工作的?

Joh*_*ode 7

所以,代码

struct LinkedList  
{  
    int data;
    struct LinkedList *next;
};
Run Code Online (Sandbox Code Playgroud)

定义了含有名为两个构件结构类型datanext,与该next部件存储的地址不同的相同类型的对象.鉴于代码:

struct LinkedList Node1 = { .data = 1, .next = NULL };
struct LinkedList Node0 = { .data = 0, .next = &Node1 };
Run Code Online (Sandbox Code Playgroud)

你得到的东西看起来像这样:

Node0              Node1
+---+--------+    +---+------+
| 0 | &Node1 |--->| 1 | NULL |
+---+--------+    +---+------+
Run Code Online (Sandbox Code Playgroud)

(请注意,您永远不会以这种方式创建链接列表,这仅用于说明).

这可能有两个原因:

  1. C允许您声明指向不完整类型的指针;
  2. 指向struct类型的指针都具有相同的大小和表示.

这是一个自引用数据类型的示例,它只是意味着类型将引用(指针)存储到相同类型的不同对象.