我离C很远,当我潜入它时,我发现自己遇到了障碍。我有以下结构:
typedef struct{
char id;
struct S *children[SIZE];
}S;
在我的代码中,我最初声明了一个结构数组......
struct S arr[SIZE];
但是当我到达这一点时,试图将我的第一个孩子分配给我的第一个成员......
arr[0].children[0] = (S*)malloc(sizeof(S));
我收到此警告:警告:内置函数'malloc'警告的不兼容隐式声明:从不兼容的指针类型分配[默认启用]
除此之外,我收到一个对我来说听起来不合逻辑的错误。我有以下功能:
int foo(S *children[SIZE]);
但是当我打电话给这条线路时......
foo(arr[0].children);
我得到这个注释:注意:预期'struct S **'但参数类型为'struct S **' 这对我来说只是听起来很愚蠢,它期待它正在得到的争论,并对此感到不安。
非常感谢任何帮助,解释我应该做些什么来正确分配这个记忆并达到同样的想法。
答案 0 :(得分:4)
没有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));
答案 1 :(得分:1)
对于您的第一个问题,您需要执行以下操作:
#include <stdlib.h>
位于您的计划顶部,以便成功致电malloc
。
第二个问题(正如其他人所指出的)是,类定义中的struct S
引用的结构与S
不同。在C中,struct标签与类型名称位于不同的“名称空间”中。