java叶新东老师 2023-03-18 11:07 采纳率: 83.3%
浏览 28
已结题

c++对指针运算++和+=1是一样的吗?

我的理解是 ,当我们对普通的int类型进行计算时,++ 和 +=1 是一样的,但是对于指针来说好像不一样啊,

以下的例子中, 我看到+=1是正常计算的,指针指向的值进行计算, 但是进行++运算后,确实把指针地址给改变了,有人知道是为啥吗?

void addCalcu(){
        int i=1;
        int * p_i = &i;
        std::cout << "指针原值:"<<*p_i << std::endl;
        *p_i+=1;
        std::cout << "指针++后的值:"<<*p_i << std::endl;
        *p_i++;
        std::cout << "指针+=1后的值:"<<*p_i << std::endl;
}

打印后的结果如下:

img

  • 写回答

4条回答 默认 最新

  • MarkHan_ 2023-03-18 13:04
    关注

    该回答引用GPTᴼᴾᴱᴺᴬᴵ
    在C++中,指针运算++和+=1并不是一样的,因为它们的运算优先级不同。具体来说,++的运算优先级更高,因此在执行完*p_i++之后,指针p_i的地址已经发生了变化,指向的不再是原先的i变量,而是i变量后面的未知内存地址,因此输出的结果是不正确的。
    ·
    如果想让指针指向i变量后面的地址,可以使用括号改变优先级,例如(*p_i)++。另外,对于指针来说,也可以使用p_i += 1来将指针指向下一个位置。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 3月27日
  • 已采纳回答 3月19日
  • 创建了问题 3月18日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改