zoukankan      html  css  js  c++  java
  • golang之数组与切片

    数组

    数组可以存放多个同一类型数据,数组也是一种数据类型,在Go中,数组是值类型。

    数组的定义:

      var 数组名 [数组大小]数据类型

      var a [5]int

      赋初值   a[0] = 1    a[1] = 30 ....

    数组在内存布局

     总结:

      1)数组的地址可以通过数组名来获取 &intArr

      2)数组的第一个元素的地址,就是数组的首地址

      3)数组的各个元素的地址间隔是依据数组的类型决定,比如int64——>8    int32——>4 ....

    数组遍历:

      for-range

        这是Go语言一种独有的结构,可以用来遍历访问数组的元素

        用法:

          for index, value := range array01 {

          ...

          }

    注意事项和使用细节:

      1)数组是多个相同类型数据的组合,一个数组一旦声明/定义了,其长度是固定的,不能动态变化

      2)var arr []int 这时arr就是一个slice切片

      3)数组中的元素可以是任何数据类型,包括值类型和引用类型,但是不能混用

      4)数组创建后,如果没有赋值,有默认值0

      5)使用数组的步骤 1. 声明数组并开辟空间  2.给数组各个元素赋值  3.使用数组

      6)数组的下标是从0开始的

      7)数组下标必须在指定范围内使用,否则报panic:数组越界

      8)Go的数组属值类型,在默认情况下是值传递,因此会进行值拷贝,数组间不会相互影响 

      9)如想在其它函数中,去修改原来的数组,可以使用引用传递(指针方式)、

      10)长度是数组类型的一部分,在传递函数参数时需要考虑数组的长度。

    四种初始化数组的方式:

    var numsArray01 [3]int = [3]int {1, 2, 3}
    var numsArray02 = [3]int {1, 2, 3}
    var numsArray03 = [...]int {6, 7, 8}
    var names = [3]string{1: "tom", 0: "jack", 2: "marry"}

     切片(slice)

     

    切片是引用类型数据,存储了底层数组引用

    切片是数组的一个引用,因此切片是,引用类型,在进行传递时,遵守引用 传递的机制。

    切片的长度是可以变化的,因此切片是一个可以动态变化的数组。

    基本语法 :

      var 变量名 []类型

    定义切片的三种方式:

    1.定义一个切片,然后切片去引用一个已经创建好的数组,比如前面的案例就是这样的。(数组是可见的)

    2.通过make创建切片:(make会创建一个数组,但是是不可见的)

      语法:var 切片名 []type = make([]type, len, [cap])

        var slice []float64 = make([]float64, 5, 10)
        slice[1] = 10
        slice[3] = 20
    
        fmt.Println(slice)
        fmt.Println(len(slice))
        fmt.Println(cap(slice))

    3.定义一个直接就指定具体数组,使用原理类似make的方式

    append(slice, 100)

    copy(slice, slice2)

    4.append操作切片时(切片的尾部追加N个元素):内置函数append会首先使用可用容量,一旦没有可用容量,会分配一个新的底层数组。

    5.定义公式来计算新切片的长度和容量:

    slice[i:j:k]    或  slice[2:3:4]
    
    长度:j - i 或 3-2
    容量:k-i 或 4-2

    6.for  range迭代切片时,第一个值是当前迭代到的索引位置,第二个值是该位置对应元素值的一份副本。

    7.append为切片的头部追加N个元素(会导致内存的重新分配):

    	var b = []int{11, 22, 33}
    	b = append([]int{0}, b...)                        # 为b在头部添加元素0
    	b = append([]int{111, 222, 333}, b...)     # 为b在头部添加元素111, 222, 333
    

      

    人生就是要不断折腾
  • 相关阅读:
    堆和栈的区别
    九度OJ 1108 堆栈的使用
    九度OJ 1201 二叉排序树
    jQuery笔记——基础知识
    JavaScript笔记——事件
    一些知识
    JavaScript笔记——BOM的操作和浏览器的检测
    JavaScript笔记——面向对象与原型
    JavaScript笔记——基础知识(二)
    JavaScript笔记——正则表达式
  • 原文地址:https://www.cnblogs.com/xiangxiaolin/p/11817041.html
Copyright © 2011-2022 走看看