【Go】关于从切片中删除某个元素时会覆盖底层数组的说明
程序员文章站
2022-06-03 08:37:58
...
问:对于如下一段代码,执行append函数之后,数组x1的元素是多少?
func main(){
x1 := [...]int{1, 3, 5, 7}
s1 := x1[:]
s1 = append(s1[:1], s1[2:]...)
// 问: x1数组元素是多少
fmt.Println(x1)
}
起初,我认为在切片s1执行完删除操作之后,由于切片是引用操作,切片和数组内的元素都应该变为1,5,7 。结果发现执行出来切片是1,5,7,而数组竟然是1,5,7,7 !! 后来我想了想切片的本质,切片本质上是一个框,它只能框柱底层数组的部分元素。最重要的是删除元素之后的切片元素会覆盖掉原来的数组元素。即
所以最后数组元素会被覆盖,即为1,5,7,7 。
另附: append的经典面试题
问切片a最后输出的值是多少
func main() {
a := make([]int, 5, 10)
for i := 0; i < 10; i++ {
a = append(a, i)
}
// 问切片a输出的值是多少
fmt.Println(a)
}
Answer:
追加前:[0 0 0 0 0]
追加后:[0 0 0 0 0 0 1 2 3 4 5 6 7 8 9]
上一篇: servlet的执行原理与生命周期