使用三元运算符时出现“Expression must be a modifiable lvalue”错误求助
三元运算符报错“Expression must be a modifiable lvalue”的原因及解决办法
你声明的二维字符数组:
char matrix[3][3] = {{' ', ' ', ' '},{' ', ' ', ' '},{' ', ' ', ' '}};
在vacantCenter()函数中使用三元运算符判断中心位置是否为空时触发错误,而if语句可以正常运行,问题出在运算符优先级上。
C语言里,三元运算符?:的优先级高于赋值运算符=,你写的代码:
(matrix[1][1] == ' ')? n = 1: n = 0;
会被编译器解析成:
((matrix[1][1] == ' ') ? n = 1 : n) = 0;
三元表达式的计算结果是一个右值(无法被赋值的表达式),你试图把0赋值给这个右值,就会触发“Expression must be a modifiable lvalue”的错误。
两种解决办法:
- 给赋值表达式加括号,强制改变运算优先级:
(matrix[1][1] == ' ') ? (n = 1) : (n = 0);
- 直接返回三元表达式的结果,省去中间变量
n,代码更简洁高效:
int vacantCenter() { return (matrix[1][1] == ' ') ? 1 : 0; }
内容的提问来源于stack exchange,提问作者Vineeth bharadwaj
相关产品推荐
相关产品推荐

