加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:22:07 所属栏目:百科 来源:网络整理
导读:这些表达式的结果是否相同? (*ptr) += 4 // Expression 1ptr += 4 // Expression 2 我主要是一名Java开发人员,他的任务是重新编译从VS2008到VS2015的旧项目.由于左操作数不是可修改的l值,因此上面的第一行导致编译错误.问题是我是否可以使用第二个表达式而
这些表达式的结果是否相同?

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

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

ptr的类型为char *.

非常感谢有关此问题的任何见解和/或帮助.

解决方法

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

所以这些陈述不一样.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读