上面代码中创建了一个长度为7的数的arr组,同时创建一个基于数组arr的切片slice1,切片引用了数组的指数=1到指数=3之间的元素,同时也允许切片最大扩张1个元素大小的空间。如果这个扩张空间大于7那么程序就会恐慌。最后创建了一个基于slice1延申的一个切片slice2,它引用了切片的指数=1到指数=3之间的元素,由于slice1最大扩容1个元素,因此slice2也最多扩容一个元素,超过了会恐慌。
,,,创建基于底层数组的片,其帽取值在:len<=cap<=len (arr)之间
,,,创建基于一个切片的片,其帽取值在:len (slice1) & lt;=cap<=帽(slice1)之间
<强>,,3.片使用使创建
函数main () { var片=使(int [] 3 5)//len=3,帽=5 fmt.Println(片)//(0,0,0) slice2:=片(5)://片实现了对切片的扩容,切片长度变为5 fmt.Println (slice2)//(0, 0, 0, 0, 0) }, <强> 4。切片作为参数传递
函数main () { var片=使(int [] 3 5)//len=3,帽=5 fmt.Println(片)//(0,0,0) slice2:=片(5)://片实现了对切片的扩容,切片长度变为5 fmt.Println (slice2)//(0, 0, 0, 0, 0) 片[0]=999//这里片和切片的指数=0位置都是999年因为他们引用的底层数组的指数=0位置都是999 fmt.Println(片) fmt.Println (slice2) AddOne(片)//(8888,0,0) fmt.Println(片)//(8888,0,0) fmt.Println (slice2)//(8888, 0, 0, 0) } func AddOne (int []) { s [0]=8888 fmt.Println (s) } 之前因为切片是个引用类型,所以它作为参数传递给函数,函数操作的实质是底层数组
函数main () { var arr=[…] int {1, 2, 3, 4} fmt.Println (arr)//(1、2、3、4) 片:=arr [:] fmt.Println(片)//(1、2、3、4) 片=append(片、int[]{5 6 7}…)//此时切片的引用地址已经发生改变了,它引用的底层数组再也不是加勒比海盗了,而是一个新的数组newarr [1, 2, 3, 4, 5, 6, 7] fmt.Println(片)//[1,2,3,4,5,6,7]//验证片引用的地址已经发生改变 片[0]=666 fmt.Println (arr)//(1、2、3、4) fmt.Println(片)//[666年2、3、4、5、6、7) }