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”
有人可以指出我对此的任何其他参考,或者解释更多关于此语法的内容吗?我找不到类似的例子。
答案 0 :(得分:6)
你几乎是对的,但没有任务。它说“如果interval
非零,请将12 - interval
传递给printf
语句,否则传递0
”。
一般来说,三元运算符如下所示:
a ? b : c
a
,b
和c
都是表达式。如果a
的计算结果为非零,则三元运算符的计算结果为b
,如果a
计算结果为零,则三元运算符的结果是评估{{1}的结果}。
您的第二个示例是三元运算符和赋值运算符的组合。三元运算符本身不执行任何赋值。
答案 1 :(得分:-1)
任何导致布尔值的表达式都可以。在C的情况下,整数可以用作布尔值,值0
被视为false
,其他任何内容都被视为true
。
因此,在您的情况下,interval ? 12-interval : 0
表示:如果interval
非零,请使用12-interval
,否则请使用0
。为了更加详细,您可以将其重写为:
interval != 0 ? 12-interval : 0