gpt4 book ai didi

c++ - 指针算术 - 相同的表达式?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:14:40 24 4
gpt4 key购买 nike

这些表达式的结果是否相同?

&(*ptr) += 4 // Expression 1
ptr += 4 // Expression 2

我主要是一名 Java 开发人员,负责将一个旧项目从 VS2008 重新编译到 VS2015。由于左操作数不是可修改的左值,上面的第一行导致编译错误。问题是我是否可以使用第二个表达式而不是第一个表达式,因为据我了解它们应该是相同的?

ptr 是 char* 类型。

非常感谢您对此问题的任何见解和/或帮助。

最佳答案

& 返回一个左值的地址,但它本身是不可修改的,所以 (&a)++ 没有意义,因为你不能分配给 &a 。所以第一个表达式不是定义的操作。 (因此,左操作数的错误不是可修改的左值)。另外 &(*ptr) = ptr 因为你正在取消引用一个指针然后获取地址,而 &(*ptr) 是一个有效的语法结构它很漂亮无意义。第二条语句将指针移到 4 个内存地址上。

所以没有陈述是不一样的。

编辑:有趣的是它是在 VS2008 上编译的。编译器必须将 & 定义为可修改的值(本质上只是创建一个地址指针)。这可能只是编译器中的一个错误。如果您需要将代码转换为语法正确,那么第二个表达式应该就可以了。假设您希望修改 ptr 的最终结果。 (因为语句使用 +=,我觉得这是想要的语义)。

关于c++ - 指针算术 - 相同的表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46843799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com