typedef struct A A;
typedef struct A* AList;
struct A{
char* name;
AList *next;
};
AList create(char *name)
{
AList new = (AList)malloc(sizeof(AList));
new->name = name;
new->next = NULL;
return new;
}
void add(char* name, AList *aList)
{
AList list = *aList;
if (list == NULL)
{
list = create(name);
*aList = list;
}
else
{
while (list->next != NULL)
list = list->next;
list->next = create(name);
}
}
Hello! Это код, с которым я столкнулся. Все работает правильно, я получаю «назначение от несовместимого типа указателя» в последних двух строках кода, и я не знаю почему. Если я изменяю указатели, чтобы они имели совместимые типы (на мой взгляд, т. Е. List = * list-> next;), я получаю ошибку сегментации. Как я могу это исправить? Спасибо за помощь, MucoСвязанные списки/указатели в C
Существует причина, по которой я не рекомендую создавать псевдонимы типа, которые являются указателями, такими как псевдоним типа ALIST, потому что тогда легко забыть, что это указатель, и по ошибке сделать что-то указателем на указатель, как вы делать с элементом 'next', или назначать неправильный размер. –
Старайтесь не скрывать указатели на псевдонимы 'typedef'. Ваша функция' create' неверна, вы выделяете пространство для 'AList', которое является' A * ', в то время как вы должны выделять пространство для' struct A'. – Holt
Я не пурист кода, но разве этот способ не выглядит лучше? И еще, поэтому я должен выделить память для A, но вернуть A *, как ALIST new = (AList) malloc (sizeof (A)); ? – Muco