C 结构X中的结构X?
这可能真的很简单,但如何才能使结构x位于C中的结构x中呢?例如:C 结构X中的结构X?,c,recursion,struct,C,Recursion,Struct,这可能真的很简单,但如何才能使结构x位于C中的结构x中呢?例如: typedef struct _Node { Node node; } Node; 我做了一些研究并尝试使用指针,如下所示: typedef struct _Node { struct Node *node; } Node; 虽然这将变量节点作为指针保留(我不希望这样),但我只希望它是节点结构的一个实例。谢谢你的帮助。:) 编辑: 基本上我想做的是: Node current = createNode(...)
typedef struct _Node {
Node node;
} Node;
我做了一些研究并尝试使用指针,如下所示:
typedef struct _Node {
struct Node *node;
} Node;
虽然这将变量节点作为指针保留(我不希望这样),但我只希望它是节点结构的一个实例。谢谢你的帮助。:)
编辑:
基本上我想做的是:
Node current = createNode(...);
while (true) {
Node node = createNode(..., ¤t);
addToList(node);
current = somethingElse();
}
正如您可能想象的那样,我想要一个常规节点进入createNode()函数:
Node createNode(..., Node node) {}
这将导致“无限递归”。换句话说,它的规模将是无限的。编译器无法回答这个问题:分配多少内存?因此,它将抛出一条诊断消息
这就是为什么必须使用指针来创建自引用类型
typedef struct node {
struct node *node;
} node_s;
顺便说一下,以下划线开头,后跟下划线或大写字母的标识符将保留给实现。这是不可能的。因为它属于不完全类型。没有
struct节点
内部struct节点
内部struct节点
…等等。。。。这使得你原来的结构不完整。因此,类型定义不完整
原因是,
struct Node
内部struct Node{}
时,它还没有确定李>
struct Node{}
的所有定义后才能确定,但这只有在知道struct Node
的类型后才可能,这会导致悖论
struct Node*
,情况就不同了
struct Node{}
的定义。因此它是一个完整的类型你不能那样做。要理解递归,您必须首先理解递归。@d那么什么是理想的解决方法?使用指针,就像您在研究中发现的那样,如果
Node
类型的变量包含一个名为Node
的Node
类型的成员,然后,该成员还包含一个名为Node
的Node
类型的成员。。。这将是一个无限的链条。因为里面没有其他的东西,你不能用这个变量做任何事情,只能沿着无限链走到任何地方。
typedef struct node {
struct node *node;
} node_s;