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 这就是我想要的。
我会在网上等
谢谢你们的伙伴们:)
答案 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);
}
这也有效,但当然更麻烦。