slice5的容量为什么是4而不是8?

来源:5-3 Go语言-切片的更多操作方法

慕移动1325614

2019-09-19 15:51

如题,对容量的计算还是搞得晕晕的。slice5的数值是5,6,不是应该是底层数组第一个元素的索引值和长度的差的绝对值?好像是5吧?

然后通过扩展变成8?为什么看别人的答案做出来是4?晕了


写回答 关注

1回答

  • 鹏徙南暝
    2019-09-27 17:37:58

    slice5 := numbers4[4:6:8]

    首先len表示切片内包含的元素个数,显然这里就是6-4=2

    然后cap表示从切片第一个数开始,到底层数组的元素末尾(包含)的元素个数,这里底层数组是:

    var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10},长度为10

    slice5的第一个数的索引为4

    也就是说,cap的值为10-4=6

    但是由于slice5加上了容量上界索引8,所以其实cap应该是8-4=4

    等于说是,加上容量上界索引后,底层数组其实是var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8}

    总结:切片长度=结束索引-起始索引,切片容量=底层数组长度-起始索引

    如有错误,请指正。

Go语言第一课

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

107795 学习 · 148 问题

查看课程

相似问题