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

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

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

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


正在回答

1 回答

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}

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

如有错误,请指正。

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

举报

0/150
提交
取消

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

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