gpt4 book ai didi

c - 下面提到的代码中左值错误的原因是什么?

转载 作者:行者123 更新时间:2023-12-05 09:36:55 26 4
gpt4 key购买 nike

#include <stdio.h>
int main(void){
int n = 0, y = 1;
y == 1 ? n = 0 : n = 1;
if (n)
printf("YES");
else
printf("NO");
return 0;
}

有人能解释一下为什么带有三元运算符的行会产生 lvalue 错误吗?我对什么是 lvalue 有一个非常抽象的想法。让我给出我的抽象,如果我错了请纠正我。 lvalue 通常是地址,或者我们可以说我们存储常量值的变量,变量或常量的值是 rvalue。但我不明白为什么在三元运算符的赋值部分出现 lvalue 错误,即 n = 0 : n = 1。如果我能正确理解我的代码有什么问题,那将非常有帮助。

最佳答案

三元运算符 ?: 的优先级高于赋值运算符 =。所以你的表达式解析为:

(y == 1 ? n = 0 : n) = 1;

这会在赋值的左侧为您提供一个表达式,该表达式不是左值,因此不可赋值。

三元运算符的计算结果为第二部分的值或第三部分的值,这些值是您要分配给 n 的值,因此您可以将其写为:

n = y == 1 ? 0 : 1;

或者您可以反转条件并完全摆脱三元组:

n = y != 1;

关于c - 下面提到的代码中左值错误的原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64780813/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com