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不再是同一个底层的数组.

        

        

    不为其他,只为快乐!
  • 相关阅读:
    Go微服务全链路跟踪详解
    让Windows加入域的PowerShell
    关掉Windows Firewall的PowerShell
    修改IP地址的PowerShell
    如何得知当前机器上安装的PowerShell是什么版本的?
    如何在Vblock里配置Boot from SAN
    使用MDS Switch基本命令的一个例子
    [转贴]SSL工作原理
    [转贴] 数字证书及 CA 的扫盲介绍
    什么是Copy-Only Backup? 为什么要用它?
  • 原文地址:https://www.cnblogs.com/1521299249study/p/10064345.html
Copyright © 2011-2022 走看看