golang slice切片扩容问题?-灵析社区

无敌英俊大师兄

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]才对

阅读量:17

点赞量:0

问AI
JayCoder
s3 跟 Test2 中的 s 是两回事。 Test2 中 append 没有扩容,只是改变了 slice 的长度。但是它改变的是 s 的长度,而不是 s3 。它们依然共享这一个数组,但是他们有不同的长度。在 Test2 之后,数组中已经的是 [0,0,6,6,6,0,...] ,但是由于 s3 的长度还是 2 ,所以打出来还是 [0,0] 。 s4 打出了数组中的全部内容。