package main
import "fmt"
func main() {
a := [5]int{0: 0, 1: 1, 2: 2, 3: 3, 4: 4}
b := a
b[2] = 1
c := append(a[0:2], a[3:]...)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
}
返回结果:
[0 1 3 4 4]
[0 1 1 3 4]
[0 1 3 4]
疑问:
关于打印 a 的结果为什么会变,和预期的不一样
发完后 自己自习想了下这个问题
后面通过查看对应的取值地址,以及append函数的实现原理得到结果
**c := append(a[0:2], a[3:]...) 是 罪魁祸首**
`func append(slice []Type, elems ...Type) []Type`
append 函数追加的 elems 如果不超过 slice本身的长度时,就直接在 slice后面直接追加了,不会再开辟新的空间
所以, len(a) = 5
`a[0:2] = []int{0, 1}`
`a[3:] = []int{3,4}`
2+2 < 5, 所以会直接进行追加
导致 a[2],a[3] = a[3],a[4] 这样的一个运算, 同时 a、c 两个会互相影响
#1