函数的参数是值拷贝,那传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回答
-
视图和指针有点像,通过它能够查看和修改底层的array。
slice的结构类似于2-7中传递一个Cache的情况。slice内部含有一个到底层array的指针。slice进行值传递拷贝的时候,会把指针的值拷过去,但是底层的数据不会被拷贝。
就在本小节3-2的后半段,我们会讲解slice内部的数据结构,可以和2-7结合起来理解。
012018-02-14
相似问题