1

伙计们。我是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 。
我在网上等。
谢谢各位大佬:)

4

1 回答 1

5

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

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

于 2013-03-16T05:14:05.343 回答