Как передать указатель (указывающий на структуру) на функцию?

Я хочу создать связанный список в 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)

Другие вопросы по тегам