1

お忙しい中、ありがとうございました。オーディオ コーディングの教科書にあるステートメントの構文を理解するのに苦労しています。一例では、このような印刷機能があります

printf("%d semitones up or %d semitones down\n", interval,
       interval ? 12-interval : 0 );

私が理解していない部分は、条件演算子、または「?」です。「間隔が0に等しくない場合、間隔= 12 - 間隔」と読むだけでよいようですが、ここの構文は奇妙に思えます。私は、条件演算子が次のようなより肉付けされたステートメントであることに慣れています。

a = b > c ? b : c;

「b が c より大きい場合、a = b より大きく、そうでない場合は a = c」

誰かがこれに関する他のリファレンスを教えてくれますか、またはこの構文について詳しく説明してくれますか? 似たような例が見つかりません。

4

2 に答える 2

6

あなたはほぼ正しいですが、割り当ては行われていません。「intervalがゼロでない場合は12 - intervalステートメントprintfに渡し、そうでない場合は渡す0」と言っています。

一般に、三項演算子は次のようになります。

  a ? b : c

abおよびcはすべて式です。aがゼロ以外に評価された場合、三項演算子は であるかのようba評価され、 がゼロに評価された場合、三項演算子の結果は を評価した結果になりcます。

2 番目の例は、三項演算子と代入演算子の組み合わせです。三項演算子自体は代入を実行しません。

于 2013-04-13T16:18:05.397 に答える
-1

結果がブール値になる任意の式が実行されます。整数をブール値として使用できる C の場合、値0が考慮されfalse、それ以外はすべて考慮されtrueます。

したがって、あなたの場合、interval ? 12-interval : 0は次のことを意味します:intervalがゼロでない場合は を使用し12-interval、そうでない場合は を使用します0。さらに冗長にするために、次のように書き換えることができます。

 interval != 0 ? 12-interval : 0
于 2013-04-13T16:18:06.057 に答える