golang数组当参数传递时,是值传递。
golang切片当参数传递时,是引用传递。
如:
arr := make([]int, 0, 10)
arr = append(arr, 1)
test(arr)
func test(a []int){
a[0] = 2
}
调用 test(arr) ,结果是arr[0]值为2
但是,当函数中有append对切片做出改变时
如:
arr := make([]int, 0, 10)
arr = append(arr, 1)
test(arr)
func test(a []int){
a = append(a, 2)
}
调用 test(arr) ,结果是arr[0]值为1,arr[1]没有值,arr长度依然为1
解决方案:传参时声明引用
arr := make([]int, 0, 10)
arr = append(arr, 1)
test(&arr)
func test(a *[]int){
(*a) = append((*a), 2)
}
结果,arr长度为2,append生效
本文探讨了Golang中数组与切片作为函数参数时的不同行为。详细解释了值传递与引用传递的区别,并通过实例展示了如何正确地使用切片进行参数传递。
1040

被折叠的 条评论
为什么被折叠?



