2016-03-20 175 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**,所以你有不兼容的類型。