将结构指针传递给c中的函数

Swi*_*iss 20 c struct pointers

我将指向结构的指针传递给函数时遇到了问题.我的代码基本上如下所示.在main函数中调用modify_item后,stuff == NULL.我想要东西是一个指向项目结构的指针,元素等于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?
}
Run Code Online (Sandbox Code Playgroud)

Oli*_*rth 28

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

将指针传递给指针(即a struct item **),或者让函数返回指针.


Dou*_*rie 22

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);
Run Code Online (Sandbox Code Playgroud)

要么

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();
}
Run Code Online (Sandbox Code Playgroud)