Mr *_*rno 6 c recursion struct
这可能很简单,但是如何在C中的struct x中得到一个struct x?例如:
typedef struct _Node {
Node node;
} Node;
Run Code Online (Sandbox Code Playgroud)
我做了一些研究并尝试使用指针,如下所示:
typedef struct _Node {
struct Node *node;
} Node;
Run Code Online (Sandbox Code Playgroud)
虽然这会将变量节点作为指针(我不想要),但我只想让它成为Node结构的一个实例.谢谢你的帮助.:)
编辑:
基本上我要做的是:
Node current = createNode(...);
while (true) {
Node node = createNode(..., ¤t);
addToList(node);
current = somethingElse();
}
Run Code Online (Sandbox Code Playgroud)
你可以想象,我想要一个常规节点进入createNode()函数:
Node createNode(..., Node node) {}
Run Code Online (Sandbox Code Playgroud)
typedef struct node {
struct node node;
} node_s;
Run Code Online (Sandbox Code Playgroud)
这将导致"无限递归".换句话说,它的大小将是无限的.编译器无法回答这个问题:要分配多少内存?因此它会抛出一条诊断信息.
这就是为什么你必须使用指针来创建自引用类型.
typedef struct node {
struct node *node;
} node_s;
Run Code Online (Sandbox Code Playgroud)
顺便说一下,以下划线后跟下划线或大写字母开头的标识符保留给实现.
那是不可能的。因为那属于不完整类型。struct Node里面没有struct Node里面struct Node……等等……这使得你原来的结构不完整。因此类型定义不完整。
原因是这样的。
struct Node但当我们看到内部时,struct Node{}情况尚未确定。struct Node{}类型之后才有可能。struct Nodeparadox但如果包含 的话,情况就不同了struct Node *。
struct Node *,你知道它是一个指针类型。无论指针是什么类型,都需要固定数量的存储空间。struct Node{}。因此它是一个完整的类型。| 归档时间: |
|
| 查看次数: |
175 次 |
| 最近记录: |