2016-05-14 185 views
1

我有2個結構相互鏈接。這些形成了一個鏈表。使用指針訪問結構struct struct

typedef struct { 
    char *text; 
    int count; 
} *Item; 

typedef struct node { 
    Item item; 
    struct node *next; 
} *link; 

我正在構建一個查找函數來比較Item結構。

link lookup(link head, Item item){ 
    link list; 
    for(list = head; list != NULL; list = list->next) 
     if(strcmp(list->item->text, item->text) == 0) 
      return list; 
    return NULL; 
} 

更具體地說,我可以做的if語句列表 - >用品 - >文本或做我必須做的(*列表)。(*項).text區段?或者這是不可能的?

+1

你正在通過指針引用一個結構體,' - >'運算符是正確的。 (但是,要小心使用'typedef'指針(例如'typedef struct ... * Item'),這可以在代碼的其餘部分屏蔽間接級別,使乍一看難以確定)。通常''typedef struct ... Item'最好,以便在代碼本身中考慮到間接級別。有些人喜歡typedef指針,個人而言,我發現它通常會導致更多的問題,而不是它的價值。 –

+1

除了'(* list)。(* item).text'語法不正確之外,你是對的。相反,你需要寫'(*(* list).item).text' –

回答

2

除了對第二種形式使用錯誤的語法之外,您可以做任何事情。以下是等價的:

list->item->text 

和:

(*(*list).item).text 

你有什麼,(*list).(*item).text,將導致語法錯誤,因爲你必須有.操作後的結構件。

1

我可以在if語句上做list->item->text嗎?

是的,因爲兩者都是指針。


回想一下,a->b相同(*a).b