c - 如何为结构、结构内的结构数组正确分配内存,并将该数组作为参数传递

标签 c arrays pointers struct

我已经远离 C,当我重新投入其中时,我发现自己遇到了障碍。我有以下结构:

typedef struct{
      char id;
      struct S *children[SIZE];
}S;

在我的代码中,我最初声明了一个结构数组...

 struct S arr[SIZE];

但是当我开始尝试为 arr 的第一个成员分配我的第一个 child 时......

 arr[0].children[0] = (S*)malloc(sizeof(S));

我收到此警告:警告:内置函数“malloc”警告的不兼容隐式声明:从不兼容的指针类型赋值[默认启用]

最重要的是,我收到了一个对我来说听起来不太合逻辑的错误。我有以下功能:

int foo(S *children[SIZE]);

但是当我调用这条线时......

foo(arr[0].children);

我得到这个注释:注意:预期为“struct S **”但参数的类型为“struct S **” 对我来说这听起来很愚蠢,它期待着它得到的论点并且对此感到不安。

如果能帮助解释我应该如何正确分配此内存并实现相同的想法,我们将不胜感激。

最佳答案

没有struct S,只有S,它是匿名结构的typedef

同样定义struct S:

typedef struct S {
  char id;
  struct S *children[SIZE];
}S;

或者:

typedef struct S S;
struct S {
  char id;
  S *children[SIZE];
};

do avoid casting return of malloc in C :

arr[0].children[0] = malloc(sizeof(S));

关于c - 如何为结构、结构内的结构数组正确分配内存,并将该数组作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25802326/

相关文章:

c - 无符号字符的 v8 Node 缓冲区

c - 如何调试无法使用gdb访问地址

c - 我们不能用指针进行什么操作?

C++ 参数是指向常量对象的指针,但未返回更新的对象?

c - 为什么在类型定义结构时使用不同的标识符?

c++ - 这是如何运作的?

php - Laravel - 在 Controller 中存储和设置数组

java - 如何检查数组中的确切元素是否包含在 ArrayList 中存储的数组中?

c - 修改C字符串常量?

c++ - 正确使用 offsetof 宏