プロが教えるわが家の防犯対策術!

こんにちわ

C言語初心者です。

C言語の教科書を見ていたら
双方向リストへの挿入というところで
struct CELL{
struct CELL *prev;
struct CELL *next;
int value;
}
x->prev=p;
x->next=p->next;
p->next->prev=x;
p->next=x;
という記述がありました。

質問はこの部分で
p->next->prev=x;
アロー演算子が2個つくとどうなるんですか?

出来ればこの双方向リストの例でたとえてもらえるとうれしいです。

よろしくお願いします。

教えて!goo グレード

A 回答 (2件)

複数の演算子が使われている式を計算する場合、


例1) A # B $ C

どの順番で計算を行うかは、演算子の優先順位と結合規則を元に決まります
例2) 優先順位が # < $ なら A # (B $ C)
例3) 優先順位が # > $ なら (A # B) $ C
例4) 優先順位が同じ、結合規則が「右から左」なら A # (B $ C)
例5) 優先順位が同じ、結合規則が「左から右」なら (A # B) $ C
参考) http://msdn.microsoft.com/ja-jp/library/2bxt6kc4 …

ご質問のケースですが、
アロー演算子どうし → 優先順位が同じ、結合規則が「左から右」
ついでにアローと代入 → 優先順位が アロー > 代入
なので、
p->next->prev = x;

(p->next) -> prev = x; // アローは「左から右」

((p->next)->prev) = x; // アロー > 代入

struct CELL* q = p->next;
(q->prev) = x;

意味合い的には、双方向リストの要素 p の次に x を挿入するため、
1. p の次の要素にて
2. 前への参照を
3. x に書き換る
と思われます
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。

丁寧な説明でバッチシ理解できました。
ずっともやもや考えていたのでたすかりました。

お礼日時:2014/06/13 20:27

>アロー演算子が2個つくとどうなるんですか?



a+b がわかれば a+b+c もわかるのと同じ理屈です。

>p->next->prev=x;
は、
struct CELL *work;
work = p->next;
work->prev = x;
と同じだと言えばわかりますか?
    • good
    • 0
この回答へのお礼

お返事ありがとうございました。

とても参考になり理解できました。

お礼日時:2014/06/13 20:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

教えて!goo グレード

人気Q&Aランキング