繁体   English   中英

结构X中的结构X?

[英]Struct X in Struct X?

这可能很简单,但是如何在C中的struct x中得到一个struct x? 例如:

typedef struct _Node {
    Node node;
} Node;

我做了一些研究并尝试使用指针,如下所示:

typedef struct _Node {
    struct Node *node;
} Node;

虽然这会将变量节点作为指针(我不想要),但我只想让它成为Node结构的一个实例。 谢谢你的帮助。 :)

编辑:

基本上我要做的是:

Node current = createNode(...);
while (true) {
    Node node = createNode(..., &current);
    addToList(node);
    current = somethingElse();
}

你可以想象,我想要一个常规节点进入createNode()函数:

Node createNode(..., Node node) {}
typedef struct node {
    struct node node;
} node_s;

这将导致“无限递归”。 换句话说,它的大小将是无限的。 编译器无法回答这个问题: 要分配多少内存 因此它会抛出一条诊断信息。

这就是为什么你必须使用指针来创建自引用类型。

typedef struct node {
    struct node *node;
} node_s;

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

那是不可能的。 因为那是不完整的类型。 没有struct Node内部struct Node内部struct Node ...等等....这使得原来的结构不完整。 因此类型定义不完整。

原因是。

  1. 为了使一个字段位于结构内部,它必须是已知类型。
  2. 但是当我们在struct Node{}看到struct Node它尚未确定。
  3. 它只是在扫描了struct Node{}所有定义之后才确定,但这只有在知道了struct Node的类型之后才有可能导致paradox

但是,如果包含struct Node *则情况会有所不同。

  1. 当你到达struct Node * ,你知道它是一个指针类型。 无论指针的类型是什么,都需要一定量的存储空间。
  2. 因此,它成功扫描并完成struct Node{}的定义。 因此它是一个完整的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM