17

Вопрос по struct, c – Передача указателя структуры на функцию в c

У меня проблема с передачей указателя на структуру в функцию. Мой код по сути то, что показано ниже. После вызова modify_item в главной функции, stuff == NULL. Я хочу, чтобы вещи были указателем на структуру элемента с элементом равным 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?
}
  • 20

    или же

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

  • 25

    Потому что вы передаете указатель

    by value, Функция работает с копией указателя и никогда не изменяет оригинал.

    Либо передайте указатель на указатель (т.е.struct item **), или вместо этого, чтобы функция возвращала указатель.