Go数组

数组

  1. 概念

    存储一组相同数据类型的数据的数据结构。

    数组一旦定义后,长度不可改变。

  2. 语法

    var 数组名 [长度]数据类型
    
    var a1 [5]int = [5]int{1,2,3}
    或 var a1 = [5]int{1,2,3}
    
    var a2 [5]int
    a2[0]=1
    
    var a3 [5]int = [5]int{1:3,4:8}//在指定位置赋值
    var a4 = [...]int{1,2,3}//使用类型推断,自动推测数组长度
    
  3. 长度与容量

    1. go语言的内置函数
    2. 长度 len() 不是数组独有的,array/map/slice/string都可以使用
    3. 容量 cap()
  4. 内存分析

    1. 在内存开辟连续内存空间,数组的地址就是数组首个元素的地址

    2. 获取数组的内存地址

      var a6 [5]int
      fmt.Printf("%p",&a6)
      
    3. 创建过程

      1. 首先根据变量的类型和数组长度,开辟相应的内存空间,并且内存空间初始化为相应类型的零值
      2. 数组变量指向内存空间首个元素的地址
  5. 数组的遍历

    var a3 = [5]int{1,2}
    for i,v := range {
    	
    }
    
  6. 数组类型

    [size]type

  7. 值传递

    1. 理解为存储的数值本身
    2. 将数据复制一份,赋值给变量,修改变量值不影响原来的数据
    3. 数组也是值传递
    4. int,float,bool,string,array
  8. 引用传递

    1. 理解为存储的数据内存地址
    2. 将内存地址赋值一份,赋值给其他变量
    3. slice,map是引用传递
  9. 值类型可以用==比较

    数组作为值类型,使用==比较时,只要对应下标位上的值相等,数组就相等

  10. 数组的排序

  11. 二维数组

    var a1 = [3][4]int{{},{},{}}
    a1 = [3][4]int{{1,2,3},{4,5,6},{7,8,9}}
    3个一维数组
    每个一维数组长度位4
    
    一层数组中存放了二层数组的地址,如a1[0]存放了a[0][0]的地址
    
    len(a1) 是二维数组中一维数组的个数,也就是一维数组中存储数值的个数
    
    var tva = [2][2]int{[2]int{}, [2]int{}}
    
    //遍历二维数组
    for _,arr1 := range tva{
        for _,arr2 := range arr1 {
            fmt.Println(arr2)
        }
    }
    

posted @ 2020-02-28 16:03  henryno12  阅读(264)  评论(0编辑  收藏  举报