• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 アロー演算子について質問です。)

C言語のアロー演算子についての質問

このQ&Aのポイント
  • C言語初心者によるアロー演算子の質問です。
  • この質問は、双方向リストへの挿入の例を通じてアロー演算子の働きについて理解したいというものです。
  • 具体的には、p->next->prev=x;の部分がどのような意味を持つのかを知りたいとしています。

質問者が選んだベストアンサー

  • ベストアンサー
  • Ogre7077
  • ベストアンサー率65% (170/258)
回答No.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.aspx ご質問のケースですが、 アロー演算子どうし → 優先順位が同じ、結合規則が「左から右」 ついでにアローと代入 → 優先順位が アロー > 代入 なので、 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 に書き換る と思われます

takatttt
質問者

お礼

お返事ありがとうございました。 丁寧な説明でバッチシ理解できました。 ずっともやもや考えていたのでたすかりました。

その他の回答 (1)

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.1

>アロー演算子が2個つくとどうなるんですか? a+b がわかれば a+b+c もわかるのと同じ理屈です。 >p->next->prev=x; は、 struct CELL *work; work = p->next; work->prev = x; と同じだと言えばわかりますか?

takatttt
質問者

お礼

お返事ありがとうございました。 とても参考になり理解できました。

関連するQ&A