You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

指针直接赋值与解引用赋值的区别解析

Case1 和 Case2 操作的核心差异分析

先明确初始状态:

  • first 指向一个独立的 node 对象(data=5,r和l为NULL)
  • prev 指向另一个独立的 node 对象(data=10,r和l为NULL)

Case1: first = prev;

这是指针变量的赋值操作:

  • 直接将prev中存储的内存地址,复制给first变量
  • 操作完成后,first和prev将指向同一块内存区域(也就是原来prev指向的data=10的node对象)
  • 原来first指向的data=5的node对象,因为没有任何指针再引用它,会成为内存泄漏(除非后续有其他指针重新指向它)
  • 后续对first的指针操作(比如first->data = 20),会直接修改prev指向的对象内容,两者完全绑定

Case2: *first = *prev;

这是对象内容的拷贝赋值操作:

  • 把prev指向的对象的所有成员变量值,逐个复制到first指向的对象中
  • 操作完成后,first仍然指向原来的内存地址(data=5的node对象),但它的成员会被覆盖:first->data变为10,first->r和first->l变为NULL(和prev指向的对象状态完全一致)
  • 原来的两个node对象都依然存在,各自有独立的内存地址,不会出现内存泄漏
  • 后续修改first指向的对象内容,不会影响prev指向的对象,反之亦然,两者是完全独立的两个实例

一句话总结

  • Case1是让两个指针"共享同一个对象",抛弃原来的对象;Case2是让两个指针各自指向的对象"内容同步",对象本身还是独立的

内容的提问来源于stack exchange,提问作者Akshat Shahjade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:47:01