Как передать указатель (указывающий на структуру) на функцию?
Я хочу создать связанный список в C, но когда я использую код ниже, gcc выдает эту ошибку:
Ошибка: неверный аргумент типа "->" (есть "список структур")
Код является:
#include <stdio.h>
#include <stdlib.h>
struct list{
int age;
struct list *next;
};
void create_item(int *total_items,
struct list where_is_first_item,
struct list where_is_last_item)
{
struct list *generic_item;
generic_item = malloc(sizeof(struct list));
printf("\nage of item %d: ", (*total_items)+1);
scanf("%d", &generic_item->age);
if(*total_items == 0){
where_is_first_item->next=generic_item;
where_is_last_item->next=generic_item;
printf("\nitem created\n");
}
else{
where_is_last_item->next=generic_item;
printf("\nitem created\n");
}
int main (void){
struct list *where_is_first_item;
struct list *where_is_last_item;
int total_items=0;
printf("\n\n\tCREATE A NEW ITEM\n");
create_item(&total_items, where_is_first_item, where_is_last_item);
total_items++;
return 0;
}
2 ответа
void create_item(int *total_items, struct list *where_is_first_item, struct list *where_is_last_item)
Добавьте звезду!
Вы также ссылаетесь на неверную память, потому что вы выделяете generic_item
но тогда ссылка where_is_first_item
, where_is_first_item
не выделен для. Пытаться where_is_first_item = generic_item;
прежде чем использовать where_is_first_item
,
Вы также найдете, что указатели в вашем main
функция остается неизменной, поскольку передаются значения указателя. Здесь это сбивает с толку / интересно: если вы хотите, чтобы ваши указатели в main
чтобы быть модифицированным, вам нужно передать указатели указателям: struct_list **where_is_first_item
, Поверьте мне, это, вероятно, сделает вашу голову.
Вы забыли передать свои структурные параметры как указатели.
Изменить:
create_item(int *total_items, struct list where_is_first_item, struct list where_is_last_item)
чтобы:
create_item(int *total_items, struct list *where_is_first_item, struct list *where_is_last_item)