GO入门(六)数组

数组就是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素,一个数组包含的元素个数被称为数组的长度。

一、定义数组的格式

var [n] 这里要注意n>=0

    var a [2]int
    a[0] = 1
    a[1] = 2
    fmt.Println(a)  //[1 2]

    //上边的初始化也可以写成如下的方式
    c := [2]int{1,2}
    fmt.Println(c) //[1 2]

    //第一个元素设置为1,其他的默认
    d := [2]int{1}
    fmt.Println(d) //[1 0]

    //创建一个大小为10的int类型数组,给索引为1的赋值为1,
    //索引为6的赋值为6,注意索引是从0开始
    e := [10]int{1:1,6:6}
    fmt.Println(e) //[0 1 0 0 0 0 6 0 0 0]

    //如果初始化的时候确定数量也可以用...来省略数量
    f := [...]int{1,2,3,4}
    fmt.Println(f) //[1 2 3 4]

二、不同长度的数组属于不同的类型

数组的长度也是类型的一部分,因此如果数组的长度不同他们也不是同一种类型

    var a [2]int
    var b [4]int
    b = a  // 这样会报错 cannot use a (type [2]int) as type [4]int in assignment
    fmt.Println(b);

下面就是对的

    var a [2]int
    var b [2]int
    b = a

    fmt.Println(b); //[0 0] int 类型默认初始化为0

三、数组在GO语言中是值类型

数组在go语言中是值类型的,这就意味着我们在方法传递的时候实际上是对数组进行了一个copy,所有对形参的操作都不会改变原数组

package main

import "fmt"

func main(){
    arr := [3]int{1, 3, 5}
    changeArr(arr)
    fmt.Println("main函数内:",arr)
}

func changeArr(a [3]int){
    a[1] = 10
    fmt.Println("changeArr函数内:",a)
}

结果

changeArr函数内: [1 10 5]
main函数内: [1 3 5]

可以看出changeArr方法并未改变原数组的值

四、数组可以使用==和!=来进行比较

    arr1 := [3]int{1, 2, 3}
    arr2 := [3]int{1, 2, 3}

    fmt.Println(arr1 == arr2)//true
    fmt.Println(arr1 != arr2)//false


    arr3 := [3]int{}
    arr4 := [3]int{1, 2, 3}
    fmt.Println(arr3 == arr4)    //false


五、GO可以创建多维的数组

    var arr [3][5]int 
    fmt.Println(arr)  //[[0 0 0 0 0] [0 0 0 0 0] [0 0 0 0 0]]

你可能感兴趣的:(GO入门(六)数组)