我如何将malloc返回的结构转换为结构类型?

时间:2018-07-24 18:55:15

标签: c

如何将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;
}

4 个答案:

答案 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);
}

请注意,nstruct 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的指针。