2017-07-12 12 views
-2

私はリンクリストを使用しています。私はこの線に沿って何かをする必要がありstruct要素とcの整数を比較します

// List element: a list is a chain of these 
typedef struct element 
{ 
    int val; 
    struct element* next; 
} element_t; 

// List header - keep track of the first and last list elements 
typedef struct list 
{ 
    element_t* head; 
    element_t* tail; 
} list_t; 

int i = 5; 
if(*(list->tail) == i){ 
    //do something; 
} 

私は*(list->tail)はポインタを逆参照し、リストの最後の要素を返すことを知っているこれらは、私が働いている構造体ですしかし、私はこのエラーを取得しておいてください。

error: invalid operands to binary expression ('element_t' (aka 'struct element') and 'int') 
       if(*(list->tail) != i){ 

私はint型に構造体を比較すると、無効であることを認識しています。私の質問は以下のとおりです。

  1. はなぜ間接参照ポインタを比較するprintf("%i",*(list->tail))はそれをプリントアウトしていても、動作しませんか?これはちょうど 'C'の作品ですか?

  2. 方法はありますか?

私はこの質問はhereに答えてきたことを理解し、私はかなり彼らはint型に構造体変数を比較しているか理解していません。前もって感謝します。

+1

あなたは 'list-> tail-> val'を意味しませんでしたか? – Frank

+0

[構造要素とintとの比較]の可能な複製(https://stackoverflow.com/questions/16764024/comparing-structure-element-to-int) – Olaf

+0

リンゴとオレンジを比較している理由は、 > tail'、ポインタで、特定の値を持つ?おそらく値を求めたい場合は、 'list-> tail-> val' – Jack

答えて

0

error: invalid operands to binary expression ('element_t' (aka 'struct element') and 'int')

このエラーは、intelement_tを比較すると、彼らはお互いに比較できないので、それがどんな意味がありませんしようとしていることを意味しています。

Why does comparing the dereferenced pointer not work, even though printf("%i",*(list->tail)) prints it out? Is this just the way 'C' works?

私はintelement_tをキャストだろうし、それは意味がありませんので、printf("%i",*(list->tail))が動作するはずはないと思います。いずれも理にかなっています。

  • printf("%i",list->tail->val);
  • printf("%p",list->tail);

Is there a way around this?

は、これはあなたがしたいと思うものではありませんか?

list_t *list; 

// ... 

if(list->tail->val == i){ 
    //do something; 
} 

あなたは、リストのtailを取得し、その後、あなたはtailvalを取得します。

+0

はい、これは私が欲しかったものです。なぜこれは動作し、以前の方法では動作しませんか? – Stealing

+0

私が言ったように、@ steal_1234:あなたは比較できないものを比較しようとしています。 – Charles