关于go的append

zackzhangkai · · 161 次点击 · 开始浏览    置顶
```go func main() { x := []int{1, 2, 3} y := []int{1, 2, 3} changeSlice(x, y) fmt.Println(x, y) //[1 10 3] [1 2 3] //可以看到只有x发生了改变,而y没有改变,为什么呢? } func changeSlice(x []int, y []int) { x[1] = 10 y = append(y, 20) } ``` 通过函数来传递两个切片,然后对它处理。发现如果是直接通过索引方式来改变切片是生效的,否则是不生效的。 但是通过打印地址看,其实在这个函数里面,对于变量为切片的,其实也是值传递。既然是值传递,说明传进来的两个切片是一个完 全的全新切片。与原来的切片内存地址并没有关联,那为什么通过索引的方式能够改变到原切片的值呢?

有疑问加站长微信联系

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:812540095

161 次点击  
加入收藏 微博
2 回复  |  直到 2020-07-17 09:23:55
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传