如何将malloc返回的地址转换为结构节点类型?
当我尝试编译以下代码时,每次更改类型时都会显示错误。
struct node {
int info;
struct node *link;
};
struct node createnode() {
struct node *n;
n = (struct node *) malloc( sizeof(struct node) );
// error: incompatible types when returning type 'struct node *' but 'struct node' was expected
return n;
}
答案 0 :(得分:5)
您的createnode
函数返回struct node
,但您返回struct node*
您应该更改方法签名以使其返回struct node*
答案 1 :(得分:4)
您将函数声明为返回节点,但是尝试返回节点*。您可能想要更改函数声明。 struct node *createnode() ...
答案 2 :(得分:3)
此
struct node createnode()
{ ...
表示您的函数返回struct node
,而不返回struct node *
。
struct node createnode()
{
struct node *n;
n=(struct node *)malloc(sizeof(struct node));
return(n);
}
请注意,n
是struct node *
–指向struct node
的指针。
您在函数定义中放弃了*
:
struct node *createnode()
{
struct node *n;
n=malloc(sizeof(struct node));
return(n);
}
请注意,在C语言中,您不是必须强制转换void
指针。实际上,您可以隐藏潜在的问题。
答案 3 :(得分:1)
将struct node createnode()
更改为struct node* createnode()
。
当期望返回node
时,您正在尝试返回指向node
的指针。