- 締切済み
? : の使い方
?と:の使い方がわかりません。 http://www9.plala.or.jp/sgwr-t/c/sec14.html#s14-3 この辺を見てみると、1つだけ「?」が書いてある文なら理解できたのですが、複数あるとどうなるのかよくわかりません。 たとえば・・ int a=2,b; b = (a==1) ? (a==2) ? 11 : 12 : 13; こんな時です。 どのとき、どこの値が入るのでしょうか。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- ryumei
- ベストアンサー率60% (3/5)
No.1とNo.2の方がすでに理解の仕方は答えておられるので?:についてですが…(半角では見辛いのであえて全角で書いています) (条件)?(条件が真である場合):(条件が偽である場合) といった簡易的なif文のようなものです。 当然、入れ子に対応していますので、 (条件が真である場合)もしくは(条件が偽である場合) にも同じように?:にて条件を分けることが可能です。 >int a=2,b; >b = (a==1) ? (a==2) ? 11 : 12 : 13; 上記例の場合をif文で表しますと、 int a=2,b; if( a==1 ){ if( a==2 ){ b=11; }else{ b=12; } }else{ b=13; } という風に分解することができます。 ただ…余談になりますが実際にコーディングしていく上では?:を使う機会は少ないかもしれません。 (組み込み機器等の性能に限りがある場合は使うことはありますが…大きなプロジェクトのチーム開発などでは他の開発者が理解しづらいコードは書かないことが鉄則になりますので大抵はわかりやすいif-else文を使います)
- Oh-Orange
- ベストアンサー率63% (854/1345)
★回答 ・回答者 No.2 さんと同じです。カッコを付けてみよう。 ・『条件演算子』は『条件式 ? 式1 : 式2』の3つをセットで評価します。 ・よって、『条件式 ? 式1 : 式2』の部分にカッコを追加すれば理解しやすくなります。 考え: ・カッコを付けると『b = (a==1) ? ((a==2)?11:12) : 13;』となります。 ・まず『(a==1)』で『((a==2)?11:12)』と『13』に分岐します。 →『a=2』なので『13』が『b』に代入されます。 ・また、『a=1』ならば。 ・『((a==2)?11:12)』が評価されるため、『(a==2)』で『11』と『12』に分岐します。 →『a=1』なので『12』が『b』に代入されます。 結論: ・『b』には『13』が代入されますよ。 ・『条件演算子』は『条件式 ? 式1 : 式2』の3つをカッコでくくると理解しやすいです。 ・『条件演算子』が多重であっても基本は『条件式 ? 式1 : 式2』の3つですからね。
- K_Senryu
- ベストアンサー率100% (6/6)
b = (a==1) ? ((a==2) ? 11 : 12) : 13; カッコをつけて、こんな感じにするとわかりやすい…かも。 aが1のときはカッコの中を評価して、それ以外のときは~~、と 順に読んでいけば理解できると思います。
bの値を出力するコードを書くとわかります。