- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:C言語 アロー演算子について質問です。)
C言語のアロー演算子についての質問
このQ&Aのポイント
- C言語初心者によるアロー演算子の質問です。
- この質問は、双方向リストへの挿入の例を通じてアロー演算子の働きについて理解したいというものです。
- 具体的には、p->next->prev=x;の部分がどのような意味を持つのかを知りたいとしています。
- みんなの回答 (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 に書き換る と思われます
その他の回答 (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; と同じだと言えばわかりますか?
質問者
お礼
お返事ありがとうございました。 とても参考になり理解できました。
お礼
お返事ありがとうございました。 丁寧な説明でバッチシ理解できました。 ずっともやもや考えていたのでたすかりました。