C: 结构中的结构

标签 c pointers struct

我的任务是创建一个包含节点和边的简单图形。 在我给出的无法修改的头文件中,我有

typedef struct Edge_s* Edge;
typedef struct Node_s* Node;
typedef struct Graph_s* Graph;

在我的 graph.c 中

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;

typedef struct{
  size_t value;
  Edge* edges;
  size_t s;
}*Node;

typedef struct{
  Node* nodes;
  size_t n;
  Edge* edges;
  size_t e;
}*Graph;

Edge create_edge(Node t, size_t w){
  Edge ret = malloc(sizeof(*ret));
  ret->target = t;
  ret->w = w;
  return ret;
}

编译时给出警告

warning: assignment from incompatible pointer type

我在这里有点困惑,我哪里错了,我应该如何解决?该程序几乎可以正常工作,但我遇到了一个奇怪的错误,我认为可能是因为这个。

最佳答案

你的 typedef 定义很困惑。我很惊讶它甚至可以编译。

您首先将 typedef-name Edge 定义为

typedef struct Edge_s* Edge;

然后重新定义为

typedef struct{
  size_t w;
  struct Node_s* target;
}*Edge;

这两个定义以两种完全不相关的方式定义了 Edge。 (如果第一组声明在同一个翻译单元中遇到第二组声明,我知道的所有 C 编译器都会立即报告错误。)

我会说你的第二个结构定义应该很简单

struct Edge_s {
  size_t w;
  struct Node_s* target;
};

不要尝试重新定义现有的类型定义名称。这在 C 中是完全非法的。

关于C: 结构中的结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217237/

相关文章:

c - 本地指针存储在内存中的什么位置?

C:结构体中的动态 int 数组 - 内存释放

c - 如何传递和返回指向结构数组的指针?

python - 将指向数组值的指针从 Cython 传递到 C

c - 递归反转一个句子代码。为什么常量指针指向常量字符?

C# 委托(delegate)给结构方法

c - 从 c 中的结构读取/写入

c - 在 C 中使用函数返回数组时出现杂散错误

c - 如何在C编程中使用线程计算文本文件中数字的平均值?

c - 为什么在这个例子中 j 没有递增?