我遇到了将结构指针传递给函数的问题。我的代码基本上如下所示。在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?
}
答案 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);
}