package mainimport "fmt"func main() { src := []int{0, 1, 2, 3, 4, 5, 6} a := src[:3] b := src[3:] a = append(a, 9) fmt.Println(a, b)}输出:[0 1 2 9] [9 4 5 6]append 是否将底层数组修改为 []int{0, 1, 2, 9, 4, 5, 6}?切片 a 被复制为具有值 [0, 1, 2, 9] 的新底层数组的新切片,切片 b 仍指向已修改的旧数组。感谢您的任何提示,非常感谢
1 回答
千巷猫影
TA贡献1829条经验 获得超7个赞
切片 a 被复制为具有值 [0, 1, 2, 9] 的新底层数组的新切片,切片 b 仍指向已修改的旧数组。
a := src[:3]创建了一个切片(指向 src 头的指针,长度 = 3,容量 = 7)
b := src[3:]创建了一个切片(指向 src[3] 的指针,长度 = 4,容量 = 4)
a并b共享由src
a = append(a, 9),追加到同一个slice时,只要不超过cap,就是修改的同一个数组
append 是否将底层数组修改为 []int{0, 1, 2, 9, 4, 5, 6}
是的
如果append超过capof a,将分配新数组并将数据复制到新数组
试试这个:
package main
import "fmt"
func main() {
src := []int{0, 1, 2, 3, 4, 5, 6}
a := src[:3]
b := src[3:]
a = append(a, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9)
fmt.Println(a, b)
}
输出:
[0 1 2 9 9 9 9 9 9 9 9 9 9] [3 4 5 6]
- 1 回答
- 0 关注
- 60 浏览
添加回答
举报
0/150
提交
取消