条件运算符中的“错误:需要左值作为赋值的左操作数”

2023-11-29

我是 C 新手,今天我学会了“?”运算符是 if-else 语句的短类型。但是,当我执行这段代码时:

int b;
int x;
b=3<2?x=12:x=34;

我收到错误“错误:需要左值作为赋值的左操作数”。我不明白为什么会这样。我的想法是,程序首先将34赋给x,然后将x的值(即34)赋给b。 另一方面,我可以使用该语句

int b;
int x;
b=3<2?x=12:(x=34);

没有任何错误。我查看了我的书,但没有任何帮助。为什么我不能使用第一个语句?我的电脑想做什么? 谢谢...


+1 有趣的问题 - 它强调了 C++ 和 C 之间的两个区别。

(1) C和C++中三元表达式的求值规则不同

C++解析如下

logical-OR-expression ? expression : assignment-expression

因此,它通过匹配来解析您的语句assignment-expression to x=34

b = 3<2 ? x = 12 : (x = 34);

但是C是这样解析的

logical-OR-expression ? expression : conditional-expression 

x = 34不是一个conditional-expression所以你的语句被解析为

b = (3<2 ? x = 12 : x) = 34;

(2) C++中的条件运算符可以返回一个lvalue,而 C 不能。因此,以下内容在 C++ 中合法,但在 C 中不合法:

b = (3<2 ? x = 12 : x) = 34;

在 ideone.com 上针对 C 和 C++ 编译器进行了验证。 另请参阅这些链接在c中使用三元运算符的错误C 和 C++ 三元运算符之间的差异C 和 C++ 之间的条件运算符差异对于左值规则中的差异

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

条件运算符中的“错误:需要左值作为赋值的左操作数” 的相关文章

随机推荐

  • 如何让文字接触到div的底部

    我有一个包含较大文本元素的 HTML 页面 我希望文本与包含的 div 的底部对齐 以便它接触到 div 的底部 我尝试跟随 但文本和底部之间仍然有一些空格 有什么方法可以删除这个空格并使文本接触底部吗 Here是我尝试过的活生生的例子
  • 显示模式时出现“aria-hidden elements do not contains focusable elements”问题

    我在用着反应模态在我的应用程序中 当它打开时运行斧头辅助工具给出以下错误 aria 隐藏元素不包含可聚焦元素 这是因为 React 模态添加了一个aria hidden true 到应用程序的根元素 我的所有应用程序组件都在 div 下呈现
  • 如何使用 FFMPEG 分割视频,以便每个块都以关键帧开始?

    我们需要将大型实时 WMV 视频源分割成大小相同的小块 我们制作了一个脚本 可以很好地执行此操作 但有一点除外 视频块不以关键帧开始 因此在播放大多数视频块时 它们不会显示任何图像 直到原始视频中的关键帧最终出现为止 到达 有没有办法告诉
  • SQL Server 中的 guid 实际上是如何存储和排序/比较的?

    假设我有这个指南 2A87E3E2 2B6A 4149 9F5A 1B76092843D9 它实际上是否将其存储为数据库中的字母数字 我不这么认为 因为它必须适合 16 个字节 如果没有 那么它是如何存储的呢 我的猜测是十六进制数字 但我不
  • 如何修复ggplot中的纵横比?

    我正在尝试调整绘图的大小以适合我的文档 但我很难将绘制的图表变成正方形 Example pdf file out pdf width 5 height 5 p lt ggplot mydata aes x col1 y col2 print
  • Android TextView 停止换行

    我花了很多时间寻找解决方案 但没有找到任何与我所经历的类似的东西 当我在 G2 上运行我的应用程序时 我的文本视图都不会换行文本 无论视图有多大 如果我在模拟器上运行它 它们会适当地换行 当我的其他应用程序部署到我的 G2 时 似乎没有出现
  • AngularJS 表中的键盘导航

    我正在尝试将 Windows Delphi VCL 中制作的特殊表格 网格表单移植到 Angular 应用程序 可以在此处测试 Angular 应用程序的简化版本 jsFiddle 演示 用户可以添加任意数量的行 如 jsFiddle 中所
  • 使用递归辅助函数检查素数

    我正在尝试使用递归检查一个数字是否为素数 我被要求使用递归辅助函数 但我不确定应该如何实现它 我想我知道这个算法 但我从未尝试过在 Racket 中使用递归辅助函数 这是我目前的想法 看看 n 是否能被整除i 2 Set i i 1 If
  • 2D/3D CUDA 块如何划分为扭曲?

    如果我使用一个网格来启动我的内核 该网格的块具有尺寸 dim3 block dims 16 16 网格块现在如何分割成扭曲 这样一个块的前两行是否形成一个扭曲 或者前两列 或者这是任意排序的 假设 GPU 计算能力为 2 0 线程在块内按顺
  • 在 PHP 中使用 CURL 的 POST 给出无效请求错误

    我正在使用下面的使用curl的谷歌帐户发布方法 但它给了我invalid request错误 POST o oauth2 token HTTP 1 1 Host accounts google com Content Type applic
  • ES6 将一些函数导入为对象

    动作 js export const setX gt export const setY gt export const setT gt 一些组件 js import setX setY setT from actions export c
  • 触摸事件延迟

    我们在 AppStore 有一个应用程序半身像 A 幽灵我们有一个问题 当您点击屏幕时 我们使用 CALayer 来查找动画期间所有视图的位置 如果您点击其中一个 我们就会开始一个骰子序列 但是 存在明显的延迟 似乎触摸已被缓冲 并且我们收
  • Firestore限制

    Firestore 提供 50000 个文档读取操作作为其免费捆绑包的一部分 但是 在我的应用程序中 客户端正在获取包含价格数据的集合 价格数据是随着时间的推移而创建的 因此 从特定时间戳开始 客户端最多可以读取 1000 个文档 每个文档
  • 如何从 MVC 中的 Javascript 代码将值传递到控制器

    实际上我有一个这样的场景 我通过 Javascript 获取 GridView 中检查记录的值 现在我需要将这些值发送到控制器以删除这些记录
  • 从 UIDatePicker 中删除“今天”条目

    在 iOS SDK 中使用 UIDatePicker 时 当前日期始终有一个 今天 条目 这在大多数情况下很有用 但在我需要它的地方 它却相当令人困惑 有没有办法 a 禁用 今天 条目 改为使用常规日期 并且有所有条目看起来都一样 甚至更好
  • 以编程方式检查进程是否正在后台运行

    2个问题 1 是否有任何Linux Posix API可以知道进程是否已被调用为后台进程 linux gt myprogram 代码可以吗myprogram检测到它已被调用在后台运行 通过 2 是否有任何Linux Posix API可以使
  • 尝试渲染到多个纹理以实现延迟渲染。但所有纹理都是平等的

    所以我试图在opengl中实现延迟渲染 为此 我创建了一个 FBO 它渲染 3 个纹理 一个用于位置 一个用于正常 一个用于材质信息 但是由于我尚未完成 因此第三个纹理只是片段的最终颜色 最后一个深度缓冲区用于稍后实现阴影 然后 该纹理被传
  • 从 Silverlight 重定向到另一个页面

    在 Silverlight 页面中 我想重定向到同一网站中的另一个 aspx 页面 并使用 POST 方法发送一些附加标头信息 有什么想法如何实施吗 任何样品表示赞赏 我使用的是 VSTS2008 Net 3 5 Silverlight 2
  • AWS Elastic Beanstalk 给出“无法将主机名“db”翻译为地址”错误

    我一直在尝试部署由 Django Postgresql 和 Nginx 组成的 docker 当我这样做时效果很好 sudo docker compose up However when deploy it on AWS EB it giv
  • 条件运算符中的“错误:需要左值作为赋值的左操作数”

    我是 C 新手 今天我学会了 运算符是 if else 语句的短类型 但是 当我执行这段代码时 int b int x b 3 lt 2 x 12 x 34 我收到错误 错误 需要左值作为赋值的左操作数 我不明白为什么会这样 我的想法是 程