go 语言数组

1.什么是数组

     数组属于复合型数据类型,它是由相同类型的一组零个或多个元素组成的固定长度的集合。go语言中很少直接使用数组,一般使用slice(切片),切片的长度是可以扩展的,但是slice的底层还是使用的数组。数组提供了len()方法统计自己的长度。

2.数组的声明和初始化

    声明数组:

    a.没有指定数组的大小

var arrInt []int
fmt.Printf("%T",arrInt)

    b.指定数组的大小

var arrInt [8]int

    数组初始化:

    a.使用字面值语法用一直值初始化数组

var test [3]int = [3]int{1,2,3}

    b.在不知道要初始化具体长度的数组,需要根据具体元素个数初始化数组是,可以使用"..."声明数组

td := [...]int{0,4,5,2}

    c.在数组的指定位置赋值

tx := [...]int{6:6}
fmt.Printf("%T,%d\n",tx, tx[6])

3.数组比较

    如果两个数组的元素是可以比较的,那么这两个数组也是可以相互比较的。直接通过“==”就可以直接比较两个数组,在两个数组长度、容量、和所有元素及对应位置都相同时,则这两个数组是相等的。

var a [2]int = [2]int{1,2}
b := [...]int{1,2}
fmt.Printf("%t\n",a == b)

比价的结果为true,说明这两个数组是相等的。

4.数组引用

    当数组当做参数传入到指定的func中时,函数参数变量实际接收的是数组复制的副本,在函数中对数组做任何的修改都不会改变原有的数组。其他大多数语言都是隐式的将数组引用或指针传入到函数或方法中,go语言在这方法和其他语言是不同的。

     当希望在函数中能直接改变原有的数组时,可以显示地传入数组的指针。例如下面例子将数组清零

func toZero(p *[32]byte){
   for i := range p{
      p[i] = 0
   }
}

当然函数也可以简化为

func toZero1(p *[32]byte){
   *p = [32]byte{}
}

猜你喜欢

转载自blog.csdn.net/why154285/article/details/81040683