在main()和用户定义的函数中启动结构有什么区别?

时间:2013-03-16 05:12:07

标签: c

我是C语言的新人,今天我遇到了一个问题。我希望你们帮助我摆脱困境。

struct node {
    int a;
};
void
init_structure(struct node *c)
{
    c=(struct node *)malloc(sizeof(struct node));
    c->a=1;
}
int main(){
    struct node *ss;
    init_structure(ss);
    printf("%d\n",ss->a);
}

我使用gcc编译这段代码,并且没有报告错误。但是我运行./a.out之后的答案是 11873660 (我猜可能是地址编号)而不是 1 这就是我想要的。 我会在网上等
谢谢你们的伙伴们:)

1 个答案:

答案 0 :(得分:6)

init_structure正在分配和初始化结构,但是在C中,参数是按值(而不是通过引用)传递的,所以当c更改时,ss不是改变了它。您可以使用返回值返回c并指定ss

struct node *init_structure(void)
{
    struct node *c=(struct node *)malloc(sizeof(struct node));
    c->a=1;
    return c;
}
int main(void){
    struct node *ss;
    ss = init_structure();
    printf("%d\n",ss->a);
}

另一种可以实现的方法是添加另一个间接级别:

void init_structure(struct node **c)
{
    **c=(struct node *)malloc(sizeof(struct node));
    (*c)->a=1;
}
int main(void){
    struct node *ss;
    init_structure(&ss);
    printf("%d\n",ss->a);
}

这也有效,但当然更麻烦。