golang slice底层示例代码

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])     // 看看值是否一起变化
}

  

posted @ 2020-09-06 23:52  eecjimmy  阅读(208)  评论(0编辑  收藏  举报