func change( s ...int) {
s = append(s,3)
}
slice := make([]int,5,5)
slice[0] = 1
slice[1] = 2
change(slice...)
fmt.Println(slice)
change(slice[0:2]...)
fmt.Println(slice)
第一次调用 change() 时,append() 操作使切片底层数组发生了扩容,原 slice 的底层数组不会改变;第二次调用change() 函数时,使用了操作符[i,j]获得一个新的切片,假定为 slice1,它的底层数组和原切片底层数组是重合的,不过 slice1 的长度、容量分别是 2、5,所以在 change() 函数中对 slice1 底层数组的修改会影响到原切片。
var a = [5]int{1,2,3,4,5}
var r [5]int
//range 表达式是副本参与循环,就是说例子中参与循环的是 a 的副本,而不是真正的 a
for i, v := range a {
if i == 0 {
a[1] = 12
a[2] = 13
}
r[i] = v
}
//r = [1 2 3 4 5]
//a = [1 12 13 4 5]
fmt.Println("r = ", r)
fmt.Println("a = ", a)
有疑问加站长微信联系(非本文作者)