zoukankan      html  css  js  c++  java
  • 关于go切片的理解

    package main
    
    import "fmt"
    
    func main() {
    
    	arr := [...]int{1, 3, 5, 7, 9, 11}  // arr 是一个数组
    	s1 := arr[:]
    	// 数组是连续存储的空间  切片只存放指针 没有存放数据  所以 指针的位置
    	// 只收上界影响,也就是数据的基址, 他的操作范围 只能从指针开始到连续的内存结束 如果超过容量 扩容后
    	// 就产生了新的数组和内存空间 切片的指针也会指向新的内存
    
    	fmt.Println(&s1[0])
    	fmt.Println(&arr[0])  //打印基址(也就是第一个元素的地址),结果是一样的,因为都共用同一份内存数据。空切片的地址是0x0 
    
    	s1 = s1[:1]
    	fmt.Println(&s1[0])
    	fmt.Println(&arr[0])  //修改s1的len,打印基址,结果是一样的,因为都共用同一份内存数据,且基址是同一个元素地址。
    	s1 = s1[:2]
    	fmt.Println(s1)//增加s1的len,可以打印出{1,3} ,说明切片的数据是基于arr数组,本身不保存数据,取决于当前指针的位置,
    	// 以及指针之后的,对应的arr数组的连续内存地址的值。
    
    	s1 = s1[1:3]
    	fmt.Println(&s1[0])  //左界右移1,长度2,容量5,基址变化右移1
    	fmt.Println(s1) //对应的数据,也是从基址开始的2个元素
    
    	s1 = s1[0:5]
    	fmt.Println(s1)  //长度增加,容量5,所以,是可以打印出5个元素
    }
    

      

    暗夜之中,才见繁星;危机之下,暗藏转机;事在人为,为者常成。
  • 相关阅读:
    红帽7 Shell编程
    红帽7 vim编辑器
    红帽7 管道符、重定向与环境变量
    红帽7 systemctl管理服务的启动、重启、停止、重载、查看状态等常用命令
    python 装饰器详解
    红帽7 常用系统命令
    转 JSON详解
    转 C# using 三种使用方式
    存储过程详解 转
    使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件(转)
  • 原文地址:https://www.cnblogs.com/zenghansen/p/15617521.html
Copyright © 2011-2022 走看看