我有这段代码:
typedef struct
{
node* dest;
} edge;
typedef struct
{
char *name;
int visited;
edge* edges[MAX_E];
} node;
现在struct edge
有node*
,struct node
有edge*
,任何人都可以向我解释这是如何工作的?
答案 0 :(得分:2)
您需要首先声明(不定义)其中一个结构
struct edge; // declare struct
struct node {
char *name;
int visited;
struct edge *edges[MAX_E]; // array pf pointers
};
struct edge {
struct node *dest;
};
当然你可以在这里使用typedef
。但是我没有看到使用它的任何优势,所以我的代码清除typedef
。
答案 1 :(得分:2)
我更喜欢这样做:
typedef struct node_s node;
typedef struct edge_s edge;
struct edge_s
{
node *dest;
};
struct node_s
{
char *name;
int visited;
edge *edges[MAX_E];
};
这样,您可以在任何地方使用typedef
名称。
请注意,struct
都不包含另一个的实例。相反,它们每个都包含指向另一个的指针。因此,依赖性只是能够在定义类型之前访问指针的问题。
答案 2 :(得分:0)
嗯,由于结构的交叉定义,它无法编译。 您可以通过在第一个结构之前添加第二个结构的定义(如不透明结构)来解决这个问题。
struct node;
不要忘记为此命名你的结构。
之后,它将完全按照其编码的方式执行:edge-> dest是“节点”指针,“node”具有egde指针数组。