【发布时间】:2015-07-31 20:02:29
【问题描述】:
关于三元运算符。我正在使用更干净的三元运算符在 C 中重写 if-else 语句。 代码如下:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int arr[10];
int i;
// for ( i = 0; i < 10; i++ )
// {
// if ( i % 2 == 0 )
// {
// arr[i] = 0;
// }
//
// else arr[i] = 1;
// }
for ( i = 0; i < 10; i++ )
{
i % 2 == 0 ? arr[i] = 0 : arr[i] = 1;//Line in question
}
/* Just to check the result */
for ( i = 0; i < 10; i++ )
{
printf ( "%d ", arr[i] );
}
return 0;
}
注释的代码确实有效,但令我惊讶的是,当我使用三元运算符编译文件时,我得到了以下信息:
C:\Users...\main.c|21|错误:需要左值作为赋值的左操作数|
这是一个简单的代码来检查数组中的位置是奇数还是偶数。 进行了搜索,我读到的唯一与此代码相关的是 lvalue 是一个变量。如果这是真的,我将举一个迄今为止我还没有得到答案的例子:
printf ( "%d", 23 + 4 );
占位符将被文字值 27 替换。这里不涉及任何变量,它很难工作。 谢谢。
【问题讨论】:
-
三元运算符并不比 if-else“更干净”。您令人惊讶的错误证明了这一事实。
-
至少在这种情况下,三元运算符并不比
if/else语句“更干净”。它只会使代码更难阅读(而且,正如您所见,语法不正确)。 -
不要将三元运算符用作控制结构(即根据条件执行一个或多个语句);这不是它的意思。它会导致代码更难阅读,并且正如您所发现的,存在一些优先级问题。
-
我认为大多数 C 程序员都会同意使用三元运算符 when 和
if/else会做同样的事情,只是让代码更加晦涩难懂。如果它意味着不必重复同一表达式的其他部分,则在表达式中使用它会很有用。 -
@mxajd:请不要认真对待老师的建议,至少不要在这一点上。弄清楚如何在一行中编写复杂的代码可能很有趣,但结果难以阅读且难以维护。任何给定的代码块被读取的次数将比写入的次数多得多,并且也可能被多次修改。优化是为了清晰,而不是为了简洁。
标签: c arrays ternary-operator lvalue