C 什么';s表达式的原因在此代码中必须是可修改的lvale错误?

C 什么';s表达式的原因在此代码中必须是可修改的lvale错误?,c,arrays,char,lvalue,C,Arrays,Char,Lvalue,我是C语言新手,正在学习字符数组- #include <stdio.h> int main() { char a[4]; int i = 1; if (a[i] = 'a' || a[i] = 'e') printf("%c", a[i]); return 0; } #包括 int main() { chara[4]; int i=1; 如果(a[i]=“a”| a[i]=“e”) printf(“%c”,a[i]); 返回0; } 每

我是C语言新手,正在学习字符数组-

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

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

    return 0;
}
#包括
int main()
{
chara[4];
int i=1;
如果(a[i]=“a”| a[i]=“e”)
printf(“%c”,a[i]);
返回0;
}

每当我试图在if语句中两次分配char数组时,编译器就会给出一个错误:表达式必须是可修改的lvale。我无法理解此错误的原因。我认为在if语句中,首先会为a[I]分配一个值“a”,然后最后是“e”。但情况似乎并非如此。请帮助我了解此错误的原因。

运算符优先级<代码>=的优先级低于
|

'a' || a[i]
它不是一个可修改的左值。

(a[i]='a'| | a[i]='e')
将被解析为
(a[i]=('a'| | a[i])='e')
,因为
的优先级高于
运算符
|
运算符返回值为右值且不可赋值的
0
1
。无法分配
0='e'
1='e'