【发布时间】:2011-05-15 15:38:40
【问题描述】:
我是 C 语言的新手,在我正在查看的一个示例代码中,我遇到了这样的声明:
A = A ? B: C[0]
我只是想知道上一条语句的任务是什么,执行上述语句后的结果是什么。
【问题讨论】:
-
同[如何使用条件运算符? ](stackoverflow.com/questions/392932/…)。
标签: c syntax ternary-operator
我是 C 语言的新手,在我正在查看的一个示例代码中,我遇到了这样的声明:
A = A ? B: C[0]
我只是想知道上一条语句的任务是什么,执行上述语句后的结果是什么。
【问题讨论】:
标签: c syntax ternary-operator
如果A 为真,则将B 的值分配给A,否则为C[0]。
【讨论】:
如果 A 存在(非 NULL),则 A 被分配给 B,否则为 C[0]。
【讨论】:
NULL、0(整数)、0.0(双精度)等...
它被称为ternary operator。如果expr 为真,expr ? a : b 返回a,如果为假,则返回b。 expr 可以是布尔表达式(例如 x > 3)、布尔文字/变量或任何可转换为布尔值的东西(例如 int)。
int ret = expr ? a : b 等价于:
int ret;
if (expr) ret = a;
else ret = b;
三元运算符的好处是它是一个表达式,而上面是语句,您可以嵌套表达式但不能嵌套语句。所以你可以做ret = (expr ? a : b) > 0;之类的事情
作为一个额外的花絮,Python >=2.6 的等效操作语法略有不同:a if expr else b。
【讨论】:
result = a > b ? x : y; 与此块相同:
if (a > b) {
result = x;
}
else
{
result = y;
}
【讨论】:
与if else 声明相同。
可以改写为:
if ( A != 0 )
{
A = B;
}
else
{
A = C[ 0 ];
}
【讨论】:
如果 A 等于 0 则 A = C[0] 否则 A = B
【讨论】: