Expression must be a modifiable lvalue error in this code的原因是啥?
Posted
技术标签:
【中文标题】Expression must be a modifiable lvalue error in this code的原因是啥?【英文标题】:What's the reason for Expression must be a modifiable lvale error in this code?Expression must be a modifiable lvalue error in this code的原因是什么? 【发布时间】:2015-03-06 05:07:28 【问题描述】:我是 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 数组时,编译器都会给出错误:表达式必须是可修改的 lvale。我不明白这个错误的原因是什么。我认为在 if 语句中,首先 a[i] 将被分配一个值 'a' 然后最后是 'e'。但它似乎不是那样的。请帮助我了解这个错误的原因是什么。
【问题讨论】:
【参考方案1】:(a[i] = 'a' || a[i] = 'e')
将被解析为(a[i] = ('a' || a[i]) = 'e')
,因为||
的优先级高于=
运算符。 ||
运算符返回0
或1
,它们是右值且不可赋值。无法分配 0 = 'e'
或 1 = 'e'
。
【讨论】:
【参考方案2】:运算符优先级。 =
的优先级低于 ||
。
'a' || a[i]
是1
,它不是可修改的左值。
【讨论】:
以上是关于Expression must be a modifiable lvalue error in this code的原因是啥?的主要内容,如果未能解决你的问题,请参考以下文章
Expression must be a modifiable lvalue error in this code的原因是啥?
C语言错误:expression must be a modifiable lvalue
Super expression must either be null or a function, not undefined
verilog 中编译错误:port must be connected to a structural net expression
The expression being assigned to optional parameter `v2' must be a constant or default value(示例代