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