簡體   English   中英

將結構指針傳遞給 c 中的 function

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM