2016-03-20 177 views
0
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); 
    } 
} 

您好!这是我有麻烦的代码。一切工作正常,我只在代码的最后两行得到“从不可指针类型的赋值”,我不知道为什么。如果我改变指针,使它们具有兼容的类型(在我看来,即list = * list-> next;),我得到分段错误。我怎样才能解决这个问题? 感谢您的帮助, 粘膜链接列表/指针C

+1

有一个原因,我不建议做类型别名是指针,就像你的'AList'类型的别名,因为那么很容易忘记这是一个指针,并错误地做一些指针指针,像你做'next'结构成员,或分配错误的大小。 –

+0

尽量不要将指针隐藏到'typedef'别名中 - 您的'create'函数是错误的,您为'AList'分配空间,这是'A *',而您应该为'struct A'分配空间。 – Holt

+0

我不是一个纯粹的代码,但是这样看起来不是很好吗?还有更多,所以我应该为A分配内存,但返回A *,如 AList new =(AList)malloc(sizeof(A)); ? – Muco

回答

0

改变这种

struct A{ 
    char* name; 
    AList *next; 
}; 

这个

struct A{ 
    char* name; 
    AList next; 
}; 

功能create的返回类型为AList,它被定义为A*。但A::next的类型是AList*,这是A**,所以你有不兼容的类型。