package main import ( "log" ) // 说明slice底层是数组的引用的示例代码 // slice的底层是数组的一个引用 // slide[:]的方式并非重新开辟新的内存地址 func main() { arr := [5]int{1, 2, 3, 4, 5} // 定义一个长度是5的数组 slice := arr[:] // 数组转换为slice slice2 := arr[:] // 再复制一个slice slice3 := arr[1:] // 再复制一个slice,这个从第二个元素开始 log.Printf("arr[1] = %p, slice[1] = %p, slice2[1] = %p, slice3[1] = %p", &arr[1], &slice[1], &slice2[1], &slice3[1]) // 地址全部一致,说明元素[1]都指向同一个内存地址 slice2[1] = 100 // 修改slice2的第二个元素的值 log.Printf("arr[1] = %p, slice[1] = %p, slice2[1] = %p, slice3[1] = %p", &arr[1], &slice[1], &slice2[1], &slice3[1]) // 地址没有任何改变 log.Printf("arr[1] = %v, slice[1] = %v, slice2[1] = %v, slice3[0] = %v", arr[1], slice[1], slice2[1], slice3[0]) // 看看值是否一起变化 }
原文:https://www.cnblogs.com/eecjimmy/p/13624424.html