有个难题请教一下大家,slice 切片扩容导致的问题
网上看到了一篇文章,里面有一个很有意思的问题,但是解释的不是很明白,我在网上也没找到解答,所以在这里想请教一下大家,感谢!
package main
import "fmt"
func main() {
s3 := make([]int, 2, 10)
fmt.Println(s3) // [0 0]
Test2(s3)
fmt.Println(s3) // [0 0]
s4 := s3[0:10]
s4[0] = 100
fmt.Println(s3) // [100 0]
fmt.Println(s4) // [100 0 6 6 6 0 0 0 0 0]
}
func Test2(s []int) {
s = append(s, 6)
s = append(s, 6)
s = append(s, 6)
fmt.Println(s) // [0 0 6 6 6]
}
得出的结果是:
[0 0]
[0 0 6 6 6]
[0 0]
[100 0]
[100 0 6 6 6 0 0 0 0 0]
不太明白,第三个结果为什么是 [0 0],而不是 [0 0 6 6 6] 呢
在 Test2 函数中,使用 append 的时候,并没有扩容,添加的数据还在底层数组的容量中,那为啥在 Test2 函数之后 s3 是 [0 0], s4:=s3 [0:10] 是 [100 0 6 6 6 0 0 0 0 0],为什么不是 [100, 0] 呢,修改了 s4 [0] 的值,s3 的第一个值也变成了 100.
想了很久都没找到答案
推荐文章: