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

时间:2012-04-08 21:31:42

标签: c pointers struct

我遇到了将结构指针传递给函数的问题。我的代码基本上如下所示。在main函数中调用modify_item后,stuff == NULL。我希望stuff成为一个指向item结构的指针,其元素等于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 个答案:

答案 0 :(得分:25)

因为您按指示传递指针。该函数对指针的副本进行操作,并且永远不会修改原始文件。

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

答案 1 :(得分:21)

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

答案 2 :(得分:0)

您还可以引用指针:

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

答案 3 :(得分:0)

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

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

int main(){
   struct item *stuff = malloc(sizeof(struct item));
   modify_item(stuff); 
}