为什么左值在某些地方转换为值而不是其他地方? [复制]

2023-12-19

考虑这段代码:

int x = 99;
int * p = &x;
*p = *p + 1;

为什么要这样做*p在左侧和右侧=运营商不同?

编译器如何知道使用左*p成为对象x和右边的*p成为x?

具体来说,如果编译器评估*p成为x,为什么*p左侧的计算结果不等于 99,从而对文字创建了错误的赋值:99 = 99 + 1;?
类似地,如果编译器评估*p成为对象x(假设这是左操作数=运营商期望),为什么不*p在右侧也评估该对象x?


解引用运算符的结果* is an lvalue。它引用一个可以分配的对象(而不仅仅是一个值)。

这意味着*p是一个左值,表示对象p明确指出x.

当在表达式中使用左值时,例如*p + 1 or x + 1,左值转换为值,不再是左值。这个转换确实not当左值是赋值运算符的左操作数时会发生。

该转换的详细信息请参见第 6.3.2.1p2 节C标准 https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf:

除非它是操作数sizeof运营商,_Alignof运算符,一元&运营商,++运营商,--运算符,或左操作数.运算符或赋值 运算符,不具有数组类型的左值将转换为 存储在指定对象中的值(并且不再是左值); 这就是所谓的左值转换

所以表达*p = *p + 1实际上等同于*p = 99 + 1。同样适用于x = x + 1.

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

为什么左值在某些地方转换为值而不是其他地方? [复制] 的相关文章

  • 与 MinGW 的静态和动态/共享链接

    我想从一个简单的链接用法开始来解释我的问题 假设有一个图书馆z它可以编译为共享库 libz dll D libs z shared libz dll 或静态库 libz a D libs z static libz a 让我想要链接它 然后
  • 使用管道在父级和子级之间传递整数值

    我对如何正确使用 pipeline 在两个进程之间传递整数值有点困惑 在我的程序中 我首先创建一个管道 然后分叉它 我假设我有 两个 管道 据我了解 这是我的任务 我的父母通过 for 循环检查某个操作的整数值 i 增加计数变量 并将值保存
  • 如何使用T4从一个模板同时生成两个文件?

    我遇到的情况是 我需要生成两个 CSharp 代码文件 它们的代码几乎相同 但方法的输入和输出类型的命名空间不同 事实上 每个文件都针对特定国家 地区 并且类型来自特定国家 地区的 WSDL 我正在围绕服务编写一些包装器 逻辑完全相同 但从
  • C++中类成员函数相互调用有什么好处?

    我是 C 新手 我发现下面的编程风格对我来说很有趣 我在这里写了一个简化版本 include
  • 每个元素的 asp.net Web 表单自定义错误消息

    我创建了一个 Web 应用程序 表单 以及后端 SQL 插入和查询 目前我正在显示所有用户错误消息 div style padding 1em div
  • 从结构调用 C++ 成员函数指针

    我找到了有关调用 C 成员函数指针和调用结构中的指针的信息 但我需要调用结构内部存在的成员函数指针 但我无法获得正确的语法 我在类 MyClass 的方法中有以下代码片段 void MyClass run struct int MyClas
  • 获取列表框中视图中的项目

    我有一个 ListBox 其属性 VirtualizingStackPanel VirtualizationMode 设置为 回收 我正在绑定一个自定义集合 实现IList and IList
  • C# 结构默认值

    我有一个方法 它接受一个包含许多具有基本数据类型的字段的结构 我想传递大部分默认值 但需要进行一些调整 但我了解结构声明中的基本字段不能包含默认值声明 例如struct S int a 42 现在是这样的 OptionsStruct opt
  • 大量互斥体对性能的影响

    假设我有一个包含 1 000 000 个元素的数组 以及多个工作线程 每个线程都操作该数组中的数据 工作线程可能会使用新数据更新已填充的元素 但每个操作仅限于单个数组元素 并且独立于任何其他元素的值 使用单个互斥锁来保护整个数组显然会导致高
  • DateTime.ParseExact - 为什么 yy 变成 2015 而不是 1915

    为什么 NET 假定以下年份是 2015 年 而不是 1915 年 var d DateTime ParseExact 20 11 15 dd MM yy new CultureInfo en GB 我想 它会尝试接近 但其背后是否有合理的
  • 将 AutomationID 与 ListView 结合使用

    我正在尝试将 AutomationId 附加到列表视图中的项目 理想情况下 将项目名称绑定到显示的项目
  • 为什么这个位图图像在加载后会改变大小?

    快速提问 我有这个1000 1000位图图像 我使用这个例程来加载它 private BitmapSource initialBitmap new BitmapImage new Uri C Users Desktop Original b
  • MPI - 发送和接收列

    我需要从一个进程发送矩阵列并从另一个进程接收它 我尝试运行以下程序 但得到了一个奇怪的结果 至少我这么认为 仅复制矩阵的第一个元素 某些矩阵元素会发生意外变化 include
  • 让 Windows 尝试读取文件

    我正在对 Windows 文件系统进行某种封装 当用户请求打开文件时 Windows 调用我的驱动程序来提供数据 在正常操作中 驱动程序返回缓存的文件内容 但是 在某些情况下 实际文件没有缓存 我需要从网络下载它 问题是是否有可能让 Win
  • 为什么我可以在另一个函数中定义一个函数?

    请参阅下面的代码 我在另一个函数中定义了一个函数 void test1 void void test2 void printf test2 n printf test1 n int main void test1 return 0 这个用法
  • c++ - <未解析的重载函数类型>

    在我的班级里叫Mat 我想要一个将另一个函数作为参数的函数 现在我有下面 4 个函数 但是在调用 print 时出现错误 第二行给了我一个错误 但我不明白为什么 因为第一行有效 唯一的区别是功能f不是班级成员Mat but f2是 失败的是
  • 查找数组中的多个索引

    假设我有一个像这样的数组 string fruits watermelon apple apple kiwi pear banana 是否有一个内置函数可以让我查询 apple 的所有索引 例如 fruits FindAllIndex ap
  • 如何防止 Lotus Notes 用户转发或复制通过 System.Net.Mail 发送的邮件?

    我想使用 SMTP 客户端 uiing microsft net 以 C 作为编程语言发送电子邮件 但是对于通过SMTP客户端发送的电子邮件 我们是否可以添加 禁止转发 或 禁止复制 等安全功能 我不希望电子邮件的收件人转发或复制电子邮件的
  • C# 多维数组解析

    我有一个多维数组 内容在调试器中看起来像这样 数组设置为 String s new String 6 4 A B Yes C A B Yes C A B No C A B Yes C A B Yes C A B Yes C A B No C
  • 使用空的weak_ptr作为参数调用map::count安全吗?

    打电话安全吗map count http www cplusplus com reference map map count on an 未初始化因此为空weak ptr http en cppreference com w cpp mem

随机推荐

  • 我如何要求一个正则表达式中至少有两个前瞻模式匹配?

    以下正则表达式可确保密码至少包含 1 个小写字母 1 个大写字母 1 个数字和 1 个特殊字符 A Z a z 0 9 a zA Z0 9 s 这样可行 在此基础上 我想要求只有满足其中两个组才能使密码有效 例如 这些是有效的密码 aaaa
  • 调整 SKSpriteNode 的大小和比例

    我的 iOS 游戏中有多个游戏对象 其中一些对象的分辨率比其他对象更高 用于游戏对象的图形是在运行时随机选择的 我想确保它们在使用时都不会超过一定的大小 所以我设计了以下算法 while self spriteNode rSize widt
  • 如何有条件地设置 rich:dataTable 中的行样式

    如何根据条件更改特定行的样式 我可以在 rich column 样式类属性中使用 JSF EL 但我必须为每一列编写 我想改变整行 Thanks 具体针对每一列
  • WCF:只允许单个客户端并拒绝其他客户端的服务

    我需要创建一个一次只允许一个客户端的 WCF 服务 所有其他请求都应被拒绝 并且客户端必须稍后重试 该服务大约需要一分钟才能完成请求 我试过了 ServiceBehavior IncludeExceptionDetailInFaults t
  • WPF:无法在 XAML 中设置只读集合的​​项目

    场景非常简单 我的自定义控件有一个只读集合属性 并且我想在 XAML 中设置集合的项目 像这样
  • 确保pandas滚动窗口函数中窗口大小恒定

    需要对数据框中每个大小为 2 的滚动窗口执行一些自定义操作 但rollingpandas 中的函数 返回一个带有初始窗口位置和 1 个元素的输出 我尝试设置min periods 但在这里没有帮助 df pd DataFrame B 0 1
  • 如何获取html页面上特定部分的背景颜色

    我使用渐变来设置 html 正文背景的颜色 CSS background linear gradient to top fb4080 10 ebb523 22 58d27c 40 2aff00 52 0fd2b7 65 6b6dff 80
  • Android 语音识别命令

    Goal 语音识别开始 说出语音命令并完成正确的操作 播放一些音乐会启动音乐播放器播放任何应该发生的事情 现在的情况 我正在运行一个测试应用程序 它启动 Android 语音识别 成功监听并将结果返回到我的 Activity 启动语音识别的
  • 什么是haslayout?

    我读过一些关于它的文章 但没有明白到底是什么 有人可以解释一下吗 是不是只和IE6有关 什么是zoom 1 Is layout是只有 IE 的 TAG 吗 Edit 我发现此信息对我来说非常有用 因为 Internet Explorer 太
  • Java:在基元上同步?

    在我们的系统中 我们有一个方法 当使用特定 ID 调用它时 它会执行一些工作 public void doWork long id 现在 这项工作可以针对不同的 ID 并发完成 但如果 2 个线程使用相同的 ID 调用该方法 则一个线程应该
  • Elasticsearch 丢弃了太多请求——缓冲区会改善情况吗?

    我们有一个工作集群 将索引请求发送到 4 节点 Elasticsearch 集群 文档在生成时就会被索引 并且由于工作人员具有高度并发性 Elasticsearch 在处理所有请求时遇到了困难 给出一些数字 工作人员同时处理多达 3 200
  • 我不明白侦听器中 lambda 表达式的参数传递

    我开始学习 Kotlin 没多久 关于 Android 侦听器中 lambda 表达式的传递 有些部分我不明白 In JAVA botton setOnClickListener new View OnClickListener Overr
  • 如何获取和使用 Alexa 技能意图响应的确认“是”或“否”

    我正在开发一项 Alexa 技能 在启动时它会询问Do you want to perform something 取决于用户的回复 yes or no 我想发起另一个意图 var handlers LaunchRequest functi
  • 在 Android Studio 中将文件(使用 Git 跟踪)从 Java 转换为 Kotlin

    Android Studio 2 3 2 中从 Java 到 Kotlin 的转换 3 0 中的行为相同 会创建一个新文件并删除以前的文件 所以 Git 对这个转换一无所知 并且 git 历史记录不会保存 在 Intellij Idea 中
  • 如何将 LockBox 3 安装到 Delphi 7 中?

    这是我第一次安装 Lockbox 的库 我从sourceforge下载了3 4 3版本 并拥有Delphi 7 第一步是让这个傻瓜在Delphi 7下编译 这真是太糟糕了 我确实希望这些组件在安装后更易于使用 好的 我有一个看起来像这样的单
  • 实现 Parcelable 接口时如何读/写布尔值?

    我正在尝试做一个ArrayList Parcelable为了将自定义对象列表传递给活动 我开始写一个myObjectList扩展的类ArrayList
  • 如何安装旧的SDK平台

    我想针对 Android 1 3 平台而不是最新的 2 2 进行测试 Here is how my Android SDK and AVD Manager look likes However I was expecting screen
  • 当存储日期 <= 最近 24 小时时,Django 返回计数

    我是菜鸟 所以这可能是一个简单的问题 但它让我难住了 我正在创建一个测试表单 以便每次用户创建文档时 创建文档的日期和时间都将存储在 CreatedDocumentDetails 模型中 我还没有实现这个代码 我专注于返回过去 24 小时内
  • 如何在控制器中合并 Laravel 对象

    我有一个控制器 我想将多个表中的数据与并行结构结合起来 我最终想要得到的是一个可以从控制器返回的对象 这样我就可以在 Backbone 中解析它 我想做这样的事情 public function index mc MainContact w
  • 为什么左值在某些地方转换为值而不是其他地方? [复制]

    这个问题在这里已经有答案了 考虑这段代码 int x 99 int p x p p 1 为什么要这样做 p在左侧和右侧 运营商不同 编译器如何知道使用左 p成为对象x和右边的 p成为x 具体来说 如果编译器评估 p成为x 为什么 p左侧的计