- ベストアンサー
c言語 優先順位について
c言語 優先順位について 下記の優先順位で1番目は、()関数呼び出しであれば左結合なので(unsigned char)を呼ばれないで、(++(f) -> fpi)[-1]を呼ばれる理由を教えて頂きたい。 (unsigned char)(++(f) -> fpi)[-1]
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
大まかに三つに分けられるというのはいいですね? ではなぜ二番目のカッコが、という話ですが普通の算術式と同じで、 カッコがあった場合にはその中身を先に計算するという約束があります。 たとえば 2 * (1 + 2) / 4 というのがあったときに、1+2 を掛け算より先にやらなければならないということと同じです。 元に戻って (unsigned char)(++(f) -> fpi)[-1] の場合ですが、まず左から見ていくと (unsigned char)があります。このキャストの対象はなにかと見ていくと (++(f) -> fpi) ですが、これはカッコに囲まれたものなのでその中身を先に解釈します。 そしてその後ろに [-1] がついていますが、 これはカッコの左側にあるキャストよりも優先順位が高いので (unsigned char) ((++(f) -> fpi)[-1]) のように全体が解釈されるということになります。 ということでどうでしょうか?
その他の回答 (3)
- sakusaker7
- ベストアンサー率62% (800/1280)
>なぜ二番目のカッコが選択されるのですか、教えて頂きたい。 選択される。とはどういう意味で書かれてますか? 「なにが」「二番目のカッコ」を「選択している」のでしょう。 もう少し字数を費やして書いていてだけませんでしょうか。
お礼
回答ありがとうございます。下記のようにカッコが三つに分けられるが、なぜ、 二番目のカッコ「(++(f) -> fpi)」 が最初の優先順位となるのでしょうか、教えて頂きたい。よろしくお願いします。 (1)(unsigned char) (2)(++(f) -> fpi) (3)[-1]
- sakusaker7
- ベストアンサー率62% (800/1280)
補足が補足になってませんが、まあ推測して書きます。 (unsigned char)(++(f) -> fpi)[-1] は大きく三つに分けられます (unsigned char) (++(f) -> fpi) [-1] 二番目のカッコの中にまたごちゃごちゃありますが、カッコに囲まれている ということで、まずこれ全体で一つとみます。 次にキャストと、三番目の[-1]に注目します。 BohYoh.com【C言語講座】演算子一覧表 http://www.bohyoh.com/CandCPP/C/operator.html などを見ればわかるように、キャストよりも[]の方が優先順位が上ですから、 (++(f) -> fpi)[-1] の結果に対して(unsigned char)でキャストするということになります。
お礼
回答ありがとうございます。なぜ二番目のカッコが選択されるのですか、 教えて頂きたい。
- sakusaker7
- ベストアンサー率62% (800/1280)
質問の意味がよくわかりません。 >(unsigned char)(++(f) -> fpi)[-1] には関数呼び出しの部分はありませんけど?
お礼
回答ありがとうこざいます。()部分です。
補足
回答ありがとうごさいます。()部分です。
お礼
回答ありがとうございます。例を出し説明して頂きましてありがとうございます。