表达式的原因必须是此代码中可修改的lvale错误?

时间:2015-03-06 05:07:29

标签: c arrays char lvalue

我是C的新手并且学习了char数组。这是我的代码 -

#include <stdio.h>
int main()
{
    char a[4];
    int i = 1;
    if (a[i] = 'a' || a[i] = 'e')

    printf("%c", a[i]);

    return 0;
}

每当我尝试在if语句中分配两次char数组时,编译器会给出错误:Expression必须是可修改的lvale。我无法理解这个错误的原因是什么。我认为在if语句中首先a [i]将被分配一个值'a'然后最终'e'。但它似乎不是那样的。请帮助我明白这个错误的原因是什么。

2 个答案:

答案 0 :(得分:5)

(a[i] = 'a' || a[i] = 'e')将被解析为(a[i] = ('a' || a[i]) = 'e'),因为||的优先级高于=运算符。 ||运算符返回01,它们是rvalue且不可分配。分配0 = 'e'1 = 'e'是不可能的。

答案 1 :(得分:1)

运营商优先权。 =的优先级低于||

'a' || a[i]

1,它不是可修改的左值。