关于C#:结构X中的结构X?

Struct X in Struct X?

这可能真的很简单,但是如何在C中将struct x放入struct x中呢?因此,例如:

1
2
3
typedef struct _Node {
    Node node;
} Node;

我已经做了一些研究,并尝试使用指针,例如:

1
2
3
typedef struct _Node {
    struct Node *node;
} Node;

尽管我不需要变量节点作为指针,但我只是希望它成为Node结构的实例。谢谢你的帮助。 :)

编辑:

基本上我想做的是:

1
2
3
4
5
6
Node current = createNode(...);
while (true) {
    Node node = createNode(..., &current);
    addToList(node);
    current = somethingElse();
}

您可能会想像,我希望常规节点进入createNode()函数:

1
Node createNode(..., Node node) {}


1
2
3
typedef struct node {
    struct node node;
} node_s;

这将导致"无限递归"。换句话说,它的大小将是无限的。编译器无法回答这个问题:要分配多少内存?因此,它将引发诊断消息。

这就是为什么必须使用指针创建自引用类型的原因。

1
2
3
typedef struct node {
    struct node *node;
} node_s;

顺便说一下,标识符以下划线开头,然后是下划线或大写字母,将保留给实现。


那是不可能的。因为那属于不完整的类型。在struct Node内的struct Node内没有struct Node ...以此类推....这会使您的原始结构不完整。因此类型定义不完整。

原因是。

  • 为了使字段位于结构内部,它必须是已知类型。
  • 但是,当我们看到struct Node{}内部的struct Node时,尚未
  • 仅在扫描struct Node{}的所有定义之后才能确定,但??是只有在知道导致paradox的内部struct Node的类型之后才有可能。
  • 但是如果包含struct Node *,情况会有所不同。

  • 当您到达struct Node *时,您就知道它是指针类型。无论指针的类型是什么,都需要固定的存储量。
  • 因此,它成功扫描了该文件并完成了struct Node{}的定义。因此,它是一个完整的类型。