欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【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 !! 后来我想了想切片的本质,切片本质上是一个框,它只能框柱底层数组的部分元素。最重要的是删除元素之后的切片元素会覆盖掉原来的数组元素。即

【Go】关于从切片中删除某个元素时会覆盖底层数组的说明

所以最后数组元素会被覆盖,即为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]

相关标签: go