传递结构指针功能在C(Passing struct pointer to function in c

2019-06-23 11:19发布

我在与一个指针传递给一个结构到功能的问题。 我的代码基本上是什么如下所示。 在主函数中调用modify_item后,东西== 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?
}

Answer 1:

因为你是按值传递的指针。 在功能上的指针的拷贝操作,从不修改原始。

或者传递指针的指针(即, struct item ** ),或替代地具有函数返回指针。



Answer 2:

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


Answer 3:

您也可以对指针的引用:

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

int main(){
   struct item *stuff = NULL;
   modify_item(stuff); //After this call, stuff == NULL, why?
    cout<<stuff->element;
    return 0;
}


文章来源: Passing struct pointer to function in c