C 中的指针运算和运算符优先级

2024-06-28

背景

今天刚和一个 C 人聊天,我们在以下问题上存在分歧:

int intgA[2] = { 1, 2 };
int intgB[2] = { 3, 5 };

int *intAPtr = intgA;
int *intBPtr = intgB;

所以当我们这样做时:

*intAPtr++ = *intBPtr++;

我的分析

First:

intBPtr加一,现在指向地址 5。 然后,尊重,保持值5;

intAPtr也加一,现在指向地址 2。 随后引用,值为2;

Lastly:

2 被 5 取代。

所以它们分别是:5和5。

他的分析

的价值*intBPtr首先被分配给*intAPtr first.

因此,它们变成:3和3。

然后两个*intAPtr and *intBPtr加一。

因此,它们分别变为:4 和 4。

我的假设

我以为++运算符优先于两者* and =,因此我的断言。

例如,如果我们有:

*intAPtr++; 

结果应该是2吧?因为我们首先递增指针,然后取消引用。

那么为什么在上述情况下,正如他所说,我们首先分配intBPtr的值intAPtr最后增加值?

在采纳了这里的所有建议之后,我在 IDE 中运行了代码,结果证实了 @sujin 的结果:

尽管它证实了我至少在优先级方面是正确的:

That: *intAPtr++ = *intBPtr++;

intAPtr++具有更高的优先级,这会导致:intAPtr将其地址加 1。

现在指向:2的地址。

同样:

intBPtr++也加 1(地址)。

现在指向:5的地址。

然后就是*'s turn:

所以两者都被解引用(*)分别为 2 和 5。

But问题仍然存在,因为上面的分配(=)似乎没有发生。

如果这样做的话,两者都会变成 5。

期待进一步的启发。


该声明

*intAPtr++ = *intBPtr++;

被解析为

*(intAPtr++) = *(intBPtr++);

并细分如下:

  • 当前指向的值intBPtr(3) 被分配到所指向的位置intAPtr (intgA[0]);
  • The pointers intAPtr and intBPtr增加。

这些事情发生的确切顺序是未指定;你不能依赖intBPtr之后递增intAPtr反之亦然,您也不能依赖于增量之前发生的分配等。

所以当这一切都完成时intgA[0] == 3 and intAPtr == &intgA[1] and intBPtr == &intgB[1].

表达方式a++评估为值a before增量。

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

C 中的指针运算和运算符优先级 的相关文章

随机推荐

  • 如何在 javascript 中用正则表达式替换特殊字符?

    我需要替换字符串中的特殊字符 如下所示 this value this value replace n g 除了正则表达式部分之外 我需要它来查找opposite所有这些 0 9 查找 0 到 9 中的任意数字 A Z 查找从大写 A 到大
  • OpenAI GPT-4 API:为什么 gpt-4-0613 会幻觉(弥补)函数参数?

    我正在使用gpt 4 0613模型 功能单一 还有系统提示中的一些自定义数据 如果该函数在聊天中很早就被触发 在前两个请求内 它的功能就很好 并且 API 会要求用户提供调用该函数所需的信息 但是 如果稍后在对话中调用该函数 例如问题 5
  • 批处理文件和脚本中的腻子?

    我有一个批处理文件 可以很好地打开腻子 c putty exe 电子邮件受保护 cdn cgi l email protection pw boyhowdy 但为了让这项工作对我有用 我需要了解如何包含命令脚本 以便它可以在 putty 工
  • R:在 glm() 中的逻辑回归中预测 (0,1)

    我正在尝试在二进制 Logit 模型中模拟 假设 情况 我正在估计通过测试的概率 考虑到测试的难度级别 1 最简单 5 最难 并以性别为控制 数据是here http dl dropbox com u 1791181 bayesglm cs
  • Apache Cordova 工具 (VS2015):将自定义条目添加到 iOS 的 *info.plist

    我正在 VS2015 上使用 Apache Cordova 工具来开发一个项目 我需要在 info plist 文件中设置一些附加选项 以便暂时解锁 HTTP Web 访问 NsAppTransportSecurity 并启用地理定位服务在
  • 关闭时发送到托盘

    单击关闭按钮时如何将最小化的窗口发送到托盘 另外 如何在应用程序启动时在托盘中显示图标 WinForm 一种方法是在窗口的 F ormClosing 事件中设置 FormClosingEventArgs 的 Cancel 属性 然后最小化到
  • HAML:form_tag 困境(缩进?)

    我正在制作 用户设置表单 并坚持使用 HAML form tag 1 2 3 each do i check box tag accept i submit tag 这会导致 语法错误 意外的 kENSURE 期望 end 工作变体是 fo
  • React JS Web 代码可以用于使用 React Native 构建移动应用程序吗?

    我正在开发一个宠物项目 Web应用程序 我想知道我是否应该使用React 因为从这段代码创建本机应用程序很容易 将来如果我需要的话 如果答案是肯定的 那么应遵循的最佳实践是什么 最重用 如果答案是否定的 您能推荐一个替代方案吗 有关我的情况
  • 如何在cypress中逐页浏览?

    我的网站中有 ajax 表 并且该表有很多页面 我的目标是遍历所有行和列 转到下一页并执行以下过程 直到页面末尾 我有以下代码 for let i 0 i lt 10 i cy get tr has td each tr rowIndex
  • 资源分叉、Finder 信息或类似的碎片不允许 Xcode 8 错误? [复制]

    这个问题在这里已经有答案了 我在 Xcode 8 中运行旧项目时收到错误 在 Xcode 7 中运行的同一项目完全流量较少 我还应用以下链接中提到的解决方案 macOS Sierra Xcode 8 中的代码签名错误 不允许资源分叉 Fin
  • 在 ASP.NET 回发时保持水平和垂直滚动位置

    编码采用 ASP NET C 我有一个 gridview 有 1000 条记录 我正在内联编辑其中一行 单击 更新 时 我希望我的网格位于回发发生之前的确切 x y 位置 如果您正在考虑使用 Page 指令 MaintainScrollPo
  • Angular 为多个根路径重用相同的延迟加载模块

    我将我的应用程序分成两个模块 一个具有主要的基本功能 另一个具有较少使用的功能 例如帐户设置 常见问题解答页面等 我想要完成的是延迟加载某些根路由路径的第二个模块 例如 account or settings无需创建许多不同的模块 据我所知
  • apache2如何允许跨域请求

    这是我的配置文件
  • 使用 Gradle 将 Lint 结果发布到 Sonar

    我正在尝试使用 Gradle 将 Lint 结果发布到声纳服务器 其他分析结果已发布 但 Lint 结果未发布 有谁有让这个工作的经验吗 我找不到任何附加信息 声纳的版本是3 5 1 Gradle的版本是1 10 顶层构建文件如下所示 有
  • 在 matplotlib 中在图像上绘制网格线

    如何在 tiff 图像上绘制规则网格线 我想在图像上的每个间隔 例如 100 x 100 像素 绘制规则的方形网格 并将其与绘图一起保存 我还需要将每个网格 ID 覆盖为 1 2 在每个网格框的中间 您需要安装 python 成像库 PIL
  • 通过 JavaScript 选择 CascadingDropDown 中的项目并调用更新

    在代码隐藏中 我可以这样做来选择某些内容 Select item in first DropDownList myCascadingDropDown 1 SelectedValue itemValue 1 itemText 1 Select
  • 构造稀疏矩阵后,从稀疏到密集再到稀疏的转换会再次降低密度

    我使用 scipy 生成稀疏有限差分矩阵 最初从块矩阵构建它 然后编辑对角线以考虑边界条件 得到的稀疏矩阵是BSR类型的 我发现如果我将矩阵转换为稠密矩阵 然后使用以下命令返回稀疏矩阵scipy sparse BSR matrix函数 我留
  • 登录 WordPress 后重定向

    我正在根据现有网站创建自定义 WordPress 主题 我想使用我创建的备用仪表板 我怎样才能将用户定向到 news php 登录后而不是 wp admin EDIT 为此有一个可用的插件 但任何可以通过functions php找到手动方
  • 如何测试工厂类?

    给定这个类 class MyBuilder public function build param1 param2 build dependencies return new MyClass dep1 dep2 dep3 我如何对这个类进行
  • C 中的指针运算和运算符优先级

    背景 今天刚和一个 C 人聊天 我们在以下问题上存在分歧 int intgA 2 1 2 int intgB 2 3 5 int intAPtr intgA int intBPtr intgB 所以当我们这样做时 intAPtr intBP