两个相互包含的结构

时间:2016-02-20 09:32:00

标签: c struct

我有这段代码:

typedef struct
{
    node* dest;
} edge;

typedef struct
{
    char *name;
    int visited;
    edge* edges[MAX_E];
} node;

现在struct edgenode*struct nodeedge*,任何人都可以向我解释这是如何工作的?

3 个答案:

答案 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指针数组。