问答详情
源自:5-3 Go语言-切片的更多操作方法

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

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

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


提问者:慕移动1325614 2019-09-19 15:51

个回答

  • 鹏徙南暝
    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}

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

    如有错误,请指正。