2016-05-14 30 views
1

2つの構造体が相互にリンクされています。これらはリンクされたリストを形成する。ポインタで構造体内部の構造体にアクセス

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 struct ... ... Item'などのポインタには' typedef'を使って注意してください。これは、コードの残りの部分にわたって間接レベルを隠すことができ、一見すると決定が困難になります)。通常は 'typedef構造体... Item 'より優れているので、コード自体の間接参照のレベルを考慮します。ポインタの型定義が気に入っている人は、個人的には、通常は価値があるよりも多くの問題を引き起こします。 –

+1

'(* list)。(* item).text'の構文が間違っています。代わりに、 '(*(* list).item).text'を書く必要があります –

答えて

2

2番目のフォームに間違った構文を使用したことを除いて、必要な操作を実行できます。以下は等価です。

list->item->text 

と:あなたが持っていた何

(*(*list).item).text 

(*list).(*item).text、あなたが.演算子の後、構造体メンバを持たなければならないため、構文エラーが発生します。

1

if文でlist->item->textを実行できますか?

はい、どちらもポインタです。


a->b(*a).bと同じであることを思い出してください。