2016-05-14 145 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