切片的一个有趣的现象,大家都来看看。

cq441745656 · 2015-11-28 04:05:17 · 2338 次点击
qkb_75_go
琴为心声

这个问题的实质是这个: 切片的下标范围[a,b) 其实是左闭右开的, 也就是包含左边界,不包含右边界。 如果写成 intSlice = append(intSlice[:index], ntSlice[index:] 这样的形式,就没问题了。

楼上的几位都没说对地方,要解痒还得自己挠。

#3
更多评论

请问,intSlice[index+1:]...,这个...是什么作用? 新手,见谅。

#1

熟悉 slice 类型的内存布局就可以解释这两种情况了。slice 是由底层数组指针、len、cap 构成 情况一: 底层数组指针不变,所以append 操作还是原数组地址数据,在append 操作结束后,数组实际存储为 1,3,4,4 情况二: range 关键字是会进行复制对象的,而 slice 是拷贝传递,所以在 for 中修改 intSlice 并不影响原来的 slice 迭代

#2