函数的参数是值拷贝,那传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
相似问题