C程序错误“;赋值的左操作数;
有人能解释一下为什么这行代码是错误的吗C程序错误“;赋值的左操作数;,c,C,有人能解释一下为什么这行代码是错误的吗 int n = 0, y = 1; y == 1 ? n = 0 : n = 1; 对于“n=1”语句,错误是“赋值的左操作数需要左值” (y == 1 ? n = 0 : n) = 1; 解释为因为n与?:运算符绑定,因为其优先级较高。 =需要l值作为其左操作数,而?:返回r值。 试试这个 y == 1 ? n = 0 : (n = 1); 或 可以使用三元运算符进行赋值,例如: int n = 0, y = 1; n = y == 1
int n = 0, y = 1;
y == 1 ? n = 0 : n = 1;
对于“n=1”
语句,错误是“赋值的左操作数需要左值”
(y == 1 ? n = 0 : n) = 1;
解释为因为n
与?:
运算符绑定,因为其优先级较高。=
需要l值作为其左操作数,而?:
返回r值。试试这个
y == 1 ? n = 0 : (n = 1);
或
可以使用三元运算符进行赋值,例如:
int n = 0, y = 1;
n = y == 1 ? 0 : 1;
你应使用:
n = y==1 ? 0 :1
根据C标准,如果试图使用条件运算符的结果作为左值,则行为是未定义的。谢谢您的回答。我理解。但这是乞丐还是中间人的问题?关于编译器的知识似乎离乞丐很远,编译器在这件事上别无选择。语言上说这就是文本的解读方式…@webrocker;当我开始学习C时,我也面临着这个问题:P@KerrekSB; 编辑:)
n = y==1 ? 0 :1