问答

当前位置
  • 首页
  • 问答
  • 57.3Sum 这里的参数传递机制是引用传递??

57.3Sum 这里的参数传递机制是引用传递??

  • Ta: Tony

在标解的第一个解法里(https://www.jiuzhang.com/solution/3sum/) ,为什么主调函数只需要把results传进去给被调函数twoSum,被调函数就会直接更改原来results的那个对象(集合)呢?而不需要返回当前的results给主调函数做整合,加到主调函数最后要返回的集合里面呢?

我的理解是:看起来这类型为List>的results变量用的是引用传递,所以results存放的是由主调函数放进来的实参变量的地址(地址的副本)。所以被调函数对形参的任何操作都通过此地址访问主调函数中的实参变量(即实际的对象),比如results.add(triple)。

我想起了这道题,98.Sort List。我写了一个用random pointer和快排的解法:https://docs.google.com/document/d/1lNUdhnfbFlwFLcvP8gdXZYLDppJn9SkhNHn0IJdAPYk/edit?usp=sharing (AC)。那为什么这里的实参的值都没有在被调函数里被改变呢?回到主调函数还是原来的值。所以这里不是引用传递,而是值传递吗(类型为ListNode的形参存放的难道不是主调函数里原本实参变量所指向的ListNode的地址的一个副本)?比如findRandomPivot的head实/形参,和getTail的left,middle,right实/形参。

所以什么情况下传递参数会使用值传递,什么情况下传递参数会使用引用传递呢?

1 个回复

2019-09-20 carry

因为在twoSum里res每次add的triple都是重新new的,然后res一直都是就一个地址

我来回答

您没有权限

为提高问答质量,问答版块发言权限只向九章学员开放

登录 注册

© Jiu Zhang 2013-. All rights reserved. 京ICP备16004690号-1