package main
import "fmt"
func main() {
s3:=make([]int,2,10)
fmt.Println(s3)
Test2(s3)
fmt.Println(s3)
s4:=s3[0:10]
fmt.Println(s4)
}
func Test2(s []int){
s=append(s,6)
s=append(s,6)
s=append(s,6)
fmt.Println(s)
}
得出的结果是:
[0 0]
[0 0 6 6 6]
[0 0]
[0 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] 是[0 0 6 6 6 0 0 0 0 0],按理来说在函数中扩容之后和外面的没关系了,那s4 应该是[0 0]才对
s3 跟 Test2 中的 s 是两回事。
Test2 中 append 没有扩容,只是改变了 slice 的长度。但是它改变的是 s 的长度,而不是 s3 。它们依然共享这一个数组,但是他们有不同的长度。在 Test2 之后,数组中已经的是 [0,0,6,6,6,0,...] ,但是由于 s3 的长度还是 2 ,所以打出来还是 [0,0] 。
s4 打出了数组中的全部内容。