表达式a<=20?b=30:c=30怎么写;这样 30 只使用一次?

And*_*res 3 c operators conditional-operator operator-precedence

我正在关注一本关于 c 编程的书并遇到了这个例子:

a<=20?b=30:c=30;
Run Code Online (Sandbox Code Playgroud)

我只需要一次使用数字 30。书中的解决方法是

((a<=20)?&b:&c)=30);
Run Code Online (Sandbox Code Playgroud)

当我尝试运行它时,出现以下错误:

左值需要作为赋值的左操作数。

那里似乎缺少一个括号,但我不知道在哪里。

你能告诉我如何解决这个问题吗?

bru*_*uno 5

假设ab是相同类型的数字,就这样做

*((a <= 20) ? &b : &c) = 30;
Run Code Online (Sandbox Code Playgroud)

获取ab地址需要取消引用('*')以获得左值

来自@Vrintle 备注,您也可以在 C++ 中进行

((a<=20)?b:c)=30;
Run Code Online (Sandbox Code Playgroud)

编译器知道表单是左值,所以不使用bc的值,而是使用它们的引用

那里似乎缺少一个括号,但我不知道在哪里。

((a<=20)?&b:&c)=30);最后一个 ')' 中没有对应的 '('

  • @Vrintle否,因为你得到*b*或*c*的值,所以就像写`10=20`,需要一个*lvalue* (2认同)