穆穆青风至 2023-05-03 11:31 采纳率: 97.4%
浏览 9
已结题

go中mak函数创建切片


s := make([]int, 0, 2)
a := [...]int{1, 2}
s = a[:]
a[1] = 100
fmt.Println("修改后")

第一条语句:用make函数创建一个切片,make函数不是一个分配内存的函数吗,就是意味着此时 s 指向这块内存?然后接下来创建一个数组,然后执行第三条语句,数组赋值给切片,那现在是变量s又指向a数组这块内存?所以后面对a的修改会影响到s,不知道理解是否有问题,感觉好奇怪,特别是s先指向make创建的内存,然后又指向数组a内存?理解是否有问题?

  • 写回答

1条回答 默认 最新

  • Huazie 优质创作者: 编程框架技术领域 2023-05-03 21:51
    关注

    make 函数 返回的 就是 新建出来的 切片的 本身的值
    s = a[:] // 这是相当于 s 指向了 a数组中取出来的切片数据,这部分数据是包含在数组中的,所以对a的修改,实际上 s相同索引引用的数据也调整了
    比如 打印 s[1] = 100

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 6月2日
  • 已采纳回答 5月25日
  • 创建了问题 5月3日