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

17

У меня проблема с передачей указателя на структуру в функцию. Мой код по сути то, что показано ниже. После вызова 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?
}

Ваш Ответ

2   ответа
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 **), или вместо этого, чтобы функция возвращала указатель.

Похожие вопросы