函数的参数是值拷贝,那传silce为啥会改变原数组呢?

来源:3-2 切片的概念

weibo_隱懓_0

2018-02-13

这块不是很理解, 既然不是传递的指针,为什么会有指针的作用?说是数组的view,这个是什么概念呢?

package main

import "fmt"

func updateSlice(arr []int) {
   arr[0] = 100
}

func updateArr(arr [9]int) {
   arr[0] = 200
}

func main() {
   arr1 := [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9}
   s_arr1 := arr1[2:6]
   updateSlice(s_arr1)
   fmt.Println(arr1)
   fmt.Println(s_arr1)
   updateArr(arr1)
   fmt.Println(s_arr1)
}


写回答

1回答

ccmouse

2018-02-13

视图和指针有点像,通过它能够查看和修改底层的array。

slice的结构类似于2-7中传递一个Cache的情况。slice内部含有一个到底层array的指针。slice进行值传递拷贝的时候,会把指针的值拷过去,但是底层的数据不会被拷贝。

就在本小节3-2的后半段,我们会讲解slice内部的数据结构,可以和2-7结合起来理解。

0
1
weibo_隱懓_0
非常感谢!
2018-02-14
共1条回复

Google资深工程师深度讲解Go语言 由浅入深掌握Go语言

语法+分布式爬虫实战 为转型工程师量身打造

5995 学习 · 1909 问题

查看课程