为了账号安全,请及时绑定邮箱和手机立即绑定

附加到新切片会影响原始切片

附加到新切片会影响原始切片

Go
慕斯王 2023-05-15 10:29:17
我有以下代码会导致奇怪的结果。我不明白为什么:func main() {    var s = []int{2, 3}    var s1 = append(s, 4)    var a = append(s1, 5)    var b = append(s1, 6)    fmt.Println(s)    fmt.Println(s1)    fmt.Println(a)    fmt.Println(b)}这会导致:[2 3][2 3 4][2 3 4 6][2 3 4 6]我的问题是:为什么 a 不是 [2 3 4 5] 而是 [2 3 4 6]?我知道附加到 b 会更改 a,但是如何更改。这是一个错误吗,因为我从未直接更改过并且显然我不希望这种情况发生?
查看完整描述

1 回答

?
人到中年有点甜

TA贡献1895条经验 获得超7个赞

请记住,切片是 3 个字段的结构。

  • 指向底层数组的指针

  • 切片的长度

  • 切片的容量

append() 函数可以就地修改其参数或返回其参数的副本和一个附加条目,具体取决于其输入的大小和容量。append() 函数创建一个新的切片,如果切片的长度大于切片指向的数组的长度。


查看完整回答
反对 回复 2023-05-15
  • 1 回答
  • 0 关注
  • 66 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信