qq_安浅若_0
2018-03-21 10:32
length = 7是为什么啊
```
package main
import "fmt"
func main() {
var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
// 切片下标4~6 容量上界到8
// slice5 = [5 6] * *, 实际长度为2 容量为4
// 后面两个*代表上界最多扩容到下标8 [5,6,7,8]
slice5 := numbers4[4:6:8]
length := (2)
capacity := (4)
fmt.Printf("%v, %v\n", length == len(slice5), capacity == cap(slice5))
// s1[:cap(s1)] 代表将其扩容到最大值
// 对其进行扩容 slice5[:4] 扩容到长度为4
// 在切片后方追加元素 [5,6,7,8,11,12,13]
// 4+3 长度为7
slice5 = slice5[:cap(slice5)]
slice5 = append(slice5, 11, 12, 13)
length = (7)
fmt.Printf("%v\n", length == len(slice5))
// copy 参数2的元素 覆盖掉参数1值中的相应位置 (索引值)
// [5,6,7,8,11,12,13] <-[0,0,0]
// [0,0,0,8,11,12,13]
// 0 1 2 3 4
slice6 := []int{0, 0, 0}
copy(slice5, slice6)
e2 := (0)
e3 := (8)
e4 := (11)
fmt.Printf("%v, %v, %v\n", e2 == slice5[2], e3 == slice5[3], e4 == slice5[4])
}
```
slice5 := numbers4[4:6:8]
slice5 = int[]{5,6}
slice5 = slice5[:cap(slice5)]
slice5 = int[]{5,6,7,8,9}
slice5 = append(slice5, 11, 12, 13)
slice5 = int[]{5,6,7,8,9,11,12,13}
所有 len(slice5)=7
要想知道他为什么是7 那就要看上一段代码中cap(slice5) 它的容量是多少,slice5 := numbers4[4:6:8] 这里有第三个数值8 就是这个切片的容量上边界,也就限制了它本身底层数组的长度从原来的10变成了8,容量的求值是数组长度减去下边界的绝对值,所以是8-4=4,后面的语句append对slice5进行了扩容,加了三个数11,12,13,所以len(slice5) = 7
你可以对照着题目看一下过程
len(slice5)=2
cap(slice5)=4
slice5 = slice5[:cap(slice5)]
len(slice5)=4
slice5 = append(slice5, 11, 12, 13)
len(slice5)=7
so,length=7
不是8吗
Go语言第一课
107752 学习 · 148 问题
相似问题