有函数递归时,传递的数组查看指针地址居然不是值传递

CyanChan · · 885 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

以下是一道子集回溯递归的题目,打印每次设置进结果的 list 发现,最后两个结果指针地址一致? 请问大家遇见过么。为什么会这样 func main() { subsets([]int{3, 2, 4,1}) } func subsets(nums []int) [][]int { var result [][]int subsetsRecursion(nums, 0, []int{}, &result) fmt.Println(result) return result } func subsetsRecursion(nums []int, n int, list []int, result *[][]int) { // 终止条件 if n == len(nums) { //temp := make([]int,len(list)) //copy(temp,list) //*result = append(*result, temp) *result = append(*result, list) fmt.Printf("%p,%d,%d\n",list,n,list) return } subsetsRecursion(nums, n+1, list, result) list = append(list, nums[n]) subsetsRecursion(nums, n+1, list, result) } 打印结果: 0x119f3e0,4,[] 0xc00012a008,4,[1] 0xc00012a028,4,[4] 0xc00012a040,4,[4 1] 0xc00012a058,4,[2] 0xc00012a070,4,[2 1] 0xc00012a090,4,[2 4] 0xc000138020,4,[2 4 1] 0xc00012a0c0,4,[3] 0xc00012a0d0,4,[3 1] 0xc00012a0f0,4,[3 4] 0xc000138040,4,[3 4 1] 0xc00012a130,4,[3 2] 0xc000138060,4,[3 2 1] ## 以下两个地址居然相同? 0xc000138080,4,[3 2 4] 0xc000138080,4,[3 2 4 1] [[] [1] [4] [4 1] [2] [2 1] [2 4] [2 4 1] [3] [3 1] [3 4] [3 4 1] [3 2] [3 2 1] [3 2 4] [3 2 4 1]]

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

885 次点击  
加入收藏 微博
3 回复  |  直到 2020-11-24 11:12:51
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传