[英]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.