为了账号安全,请及时绑定邮箱和手机立即绑定

正在回答

5 回答

```

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])

}

```

2 回复 有任何疑惑可以回复我~

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


0 回复 有任何疑惑可以回复我~

要想知道他为什么是7 那就要看上一段代码中cap(slice5) 它的容量是多少,slice5 := numbers4[4:6:8] 这里有第三个数值8 就是这个切片的容量上边界,也就限制了它本身底层数组的长度从原来的10变成了8,容量的求值是数组长度减去下边界的绝对值,所以是8-4=4,后面的语句append对slice5进行了扩容,加了三个数11,12,13,所以len(slice5) = 7

1 回复 有任何疑惑可以回复我~

你可以对照着题目看一下过程

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

0 回复 有任何疑惑可以回复我~

不是8吗

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Go语言第一课
  • 参与学习       107793    人
  • 解答问题       148    个

Go语言入门教程,编程之必备知识扩散,打好Go语言编程基础

进入课程

length长度

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信