golang 修改函数传入参数切片需要指针

func dfs(root *TreeNode, res *[]int) {
if root == nil {
return
}

*res = append(*res, root.Val)
dfs(root.Left, res)
dfs(root.Right, res)

}
在这个修正后的版本中,res参数是一个指向切片的指针。这样,我们在函数内部通过*res来访问和修改原始切片的内容,确保递归调用可以正确地将结果收集到原始切片中。

在 Go 语言中,切片是引用类型。这意味着当你将切片传递给函数时,你实际上传递的是切片的引用(底层数组的地址),而不是切片的副本。因此,对切片的修改会影响到原始切片。

但是需要注意的是,虽然切片是引用类型,但当你在函数内部对切片进行重新分配(比如使用 append 函数时),你实际上是创建了一个新的切片,而原始切片并没有被修改。这是因为切片是对底层数组的一个视图,对切片的修改可能会导致底层数组的重新分配和复制。

这就是为什么在你的原始 DFS 函数中,尽管你传递了切片 res 给递归函数,但在递归调用中对 res 进行 append 操作并不会修改原始切片的内容。为了避免这个问题,可以通过传递切片的指针来确保在函数内部对切片的修改可以影响到原始切片。


golang 修改函数传入参数切片需要指针
https://leiqi.top/2024-02-24-4fbd7a88bf6f.html
作者
Lei Qi
发布于
2024年2月24日
许可协议