24

我在将指向结构的指针传递给函数时遇到问题。我的代码基本上如下所示。在主函数中调用 modify_item 后,stuff == NULL。我希望 stuff 是指向元素等于 5 的项目结构的指针。我做错了什么?

void modify_item(struct item *s){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   s = retVal;
}

int main(){
   struct item *stuff = NULL;
   modify_item(stuff); //After this call, stuff == NULL, why?
}
4

3 回答 3

33

因为您是按值传递指针。该函数对指针的副本进行操作,并且从不修改原始指针。

要么将指针传递给指针(即 a struct item **),要么让函数返回指针。

于 2012-04-08T21:32:57.693 回答
32
void modify_item(struct item **s){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   *s = retVal;
}

int main(){
   struct item *stuff = NULL;
   modify_item(&stuff);

或者

struct item *modify_item(void){
   struct item *retVal = malloc(sizeof(struct item));
   retVal->element = 5;
   return retVal;
}

int main(){
   struct item *stuff = NULL;
   stuff = modify_item();
}
于 2012-04-08T21:34:31.723 回答
0

如果函数“modify_item”打算更改作为参数传递的结构成员,我建议修改您的代码,如下所示。

void modify_item(struct item *s){
   s->element = 5;
}

int main(){
   struct item *stuff = malloc(sizeof(struct item));
   modify_item(stuff); 
}
于 2021-06-07T08:20:33.173 回答