如何在结构中制作交叉指针

How to make cross pointers in structs

所以这是我的问题,我想创建一个图形数据库。我的概念是一个节点(代码中的类型为 "Vrtc"。它将包含一个 (int) id、一个 (char*) 字符串(称为 "str")和一个列表(l_est) 进出路径。 该列表将包含 "array" 个指向节点的指针、列表中的节点数量以及最大节点数。

typedef struct Vrtc
{
    int id;
    char *str;
    l_est *pathsIn;
    l_est *pathsOut;
} Vrtc;

typedef struct l_est{
    Vrtc **Vert;
    int qtdElem;
    int maxElem;
} l_est;

如您所知,节点内部会出现“Unknow type/Type undeclared”的问题。如果可能的话,我希望任何人都可以给出如何做的提示。

你必须使用 forward declaration:

typedef struct l_est l_est;

typedef struct {
  int id;
  char *str;
  l_est *pathsIn, *pathsOut;
} Vrtc;

typedef struct l_est {
  Vrtc **Vert;
  int qtdElem, maxElem;
} l_est;

struct l_est 的第一个类型定义是所谓的 "incomplete type"。此类型可能不能用于变量或与sizeof一起使用,但它可以用于声明指针。

不完整的类型稍后可能会被 "complete type" 覆盖,而不会引起编译器的抱怨。

可以在其他语言(例如 Pascal)中找到类似的解决方案。