[英]Passing struct pointer to function in c
我在将指向结构的指针传递给 function 时遇到问题。我的代码基本上如下所示。 在主 function 中调用 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?
}
因为您正在按值传递指针。 function 对指针的副本进行操作,并且从不修改原始指针。
将指针传递给指针(即struct item **
),或者让 function 返回指针。
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();
}
如果 function 'modify_item' 打算更改作为参数传递的结构成员,我建议像下面这样修改您的代码。
void modify_item(struct item *s){
s->element = 5;
}
int main(){
struct item *stuff = malloc(sizeof(struct item));
modify_item(stuff);
}
您还可以引用指针:
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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.