我是C语言的新手。 我对左值误差有疑问。 据我所知,当没有存储Rvalue的permanent-address-bearing-variable时,我们得到一个左值错误。在这里,我可以在左侧看到一个变量。但是,我仍然得到左值误差。 有人可以清楚我的左值或使用的算子的概念。
[
{
"key": 1,
"name": "test",
"value": "NY"
},
{
"key": 3,
"name": "test",
"value": "MA"
},
{
"key": 1,
"name": "test",
"value": "NJ"
},
{
"key": 2,
"name": "test",
"value": "CA"
},
{
"key": 1,
"name": "test",
"value": "TX"
}
]
谢谢。
答案 0 :(得分:7)
这将是
a = x < 0 ? 100 : 1000;
分配比三元运算符具有更低的优先级,因此它变得混乱。
或者这也可行(记住我之前说过的话)
x<0 ? (a = 100) : (a = 1000);
编译器如何看待你的?
((x<0) ? a = 100 : a) = 1000;
现在很清楚为什么编译器抱怨左值。(三元运算符生成一个右值和赋值运算符需要左边的左值)不是吗?
答案 1 :(得分:0)
#include"stdio.h"
void main() {
int x=10,a;
a = x<0 ? 100 : 1000;
printf(" %d",a);
}
三元运算符的使用方式不同。
x =(条件)? val1:val2;
在这里,条件可以是任何东西。
val1和val2的类型应相同。
答案 2 :(得分:0)
左值(定位符值)表示占据内存中某些可识别位置的对象(即具有地址)。
我们举个例子
int var;
var = 4;
赋值期望左值为左操作数,var
为左值,因为它是具有可识别内存位置的对象。另一方面,以下内容无效:
4 = var; // ERROR!
(var + 1) = 4; // ERROR!
常量4
和表达式var + 1
都不是左值(这使得它们成为rvalues)。它们不是左值,因为它们都是表达式的临时结果,它们没有可识别的存储位置(即它们可以在计算期间驻留在某个临时寄存器中)。因此,分配它们没有语义意义 - 无处可分配。
答案 3 :(得分:0)
您可以像这样分配值。
a = x<0 ? 100 : 1000;
答案 4 :(得分:0)
您没有将操作的结果分配回变量以进行存储。您已声明int a
但从未使用过它。
a = x < 0 ? 100 : 1000;
另外,作为附注,作业=
的优先级低于三元运算符,因此产生了警告。