zoukankan      html  css  js  c++  java
  • GO语言学习:切片

    1.切片

      切片的长度可以用len获得,容量由cap获得.

      

        s1:=make([]int,5)

        len(s1)可以得到长度为5,cap(s1)可以得到容量为5

        

        s2:=make([]int,5,8)

        len(s2)可以得到长度为5,cap(s2)可以得到容量为8

        

        在s1中我没有用make说明此切片的容量,因此他的容量和长度相等都是5

        在s2中使用make说明了长度,也说明了容量.

        s3:=[]int{1,2,3,4,5,6,7,8}

        s4:=s3[3:6]

        

        上面不使用make声明切片. 切片s3的长度和容量均为8

        至于s4,是把s3中下标从3到5的数据赋值给切片s4

        切片s4中下标0,1,2的值则为s3中下标3,4,5的值      相当于数学上的区间[3,6)  左闭右开

        所以, s4中的值为{4,5,6}

        

        你如果尝试打印出s4[3],你会发现他的值为7,与s3[6]相同。

        原因是切片可以向后延伸,但是不能向前延伸。

        在本质上切片的底层是一个数组,因此s4向后延伸会取到底层数组的值。

        你如果使用cap(s4),会发现他的容量是5,同样的道理,底层是数组,赋值的时候他的容量大小,就是s3的容量减去3,也就是5

        打印s3[3]和s4[0] 会发现值相同

        打印地址代码:fmt.Printf("s3[3]:%d ",&s3[3])

        打印地址代码:fmt.Printf("s4[0]:%d ",&s4[0])

        如果查看地址,会发现他们会在同一个地址块上取值。

        同样,你修改s3[3]的值为11,打印s4[0]的值,会发现变为11

        只有当s4的切片容量大于当前的5时,你会发下,修改s3的值,s4不会在发生变化,地址也不同

        原因是s4容量不够,需要扩展,因此也就和之前的s3不再是同一个底层的数组.

        

        

    不为其他,只为快乐!
  • 相关阅读:
    mysql 创建用户名及密码
    mysql 查询user 表结构
    mysql5.7 备份
    mysql 查询用户权限
    mysql 更改某表的字段长度
    centos7 搭建zabbix3.4
    关于存储过程return 和 output 获取
    jquery easyui datagrid getSelections用法
    DateTime ToString
    C#操作DateTable导入到Excel简单方法
  • 原文地址:https://www.cnblogs.com/1521299249study/p/10064345.html
Copyright © 2011-2022 走看看