c - 表达式 a<=20?b=30 怎么写 :c=30; such that 30 is used only once?

标签 c operators operator-precedence conditional-operator

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

a<=20?b=30:c=30;

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

((a<=20)?&b:&c)=30);

当我尝试运行它时,我收到以下错误:

lvalue required as left operand of assignment.

那里好像少了一个括号,但我不知道在哪里。

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

最佳答案

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

*((a <= 20) ? &b : &c) = 30;

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

来自@Vrintle 的备注你也可以在 C++ 中做

((a<=20)?b:c)=30;

编译器知道表单是一个左值,所以bc的值没有被使用,而是它们的引用

It seems like one of the parenthesis is missing there, but I don't know where.

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

关于c - 表达式 a<=20?b=30 怎么写 :c=30; such that 30 is used only once?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64399972/

相关文章:

c# - java 和 c# 中右移运算符的不同结果

c - "d = (((INT32) a) * ((INT32) b))"中的外括号重要吗?

c - 首先评估表达式的哪一侧?

php - 交换两个变量的 XOR 技巧如何在字符串上真正起作用?

c - 传递给 free() 的指针必须指向内存块的开头,还是可以指向内部?

java - 将 java 字符串处理为 Android Studio+NDK 的原生 C/C++

c - 尝试在函数中添加 *double 和 double

c# - 如何使用反射调用自定义运算符

c - C语言的求值顺序

c - C语言十进制转二进制