![](/img/trans.png)
[英]What's the difference between `typedef struct X { }` and `typedef struct { } 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(..., ¤t);
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
...等等....这使得原来的结构不完整。 因此类型定义不完整。
原因是。
struct Node{}
看到struct Node
它尚未确定。 struct Node{}
所有定义之后才确定,但这只有在知道了struct Node
的类型之后才有可能导致paradox
。 但是,如果包含struct Node *
则情况会有所不同。
struct Node *
,你知道它是一个指针类型。 无论指针的类型是什么,都需要一定量的存储空间。 struct Node{}
的定义。 因此它是一个完整的类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.