Go语言程序设计(四)数组

一、数组的声明

        在声明数组时,必须指定数组名、数组长度和数组类型,格式如下:

var arrayName [arraySize] dataType

说明:

  • (1)数组名的命名规则和变量名相同,遵循标识符命名规则。
  • (2)在定义数组时,需要指定数组中元素的个数,即数组长度。例如,a[5]int表示整型数组a有5个元素。对数组元素的访问通过数组下标来进行,数组下标通常由“0”开始,数组a的5个元素是:a[0],a[1],a[2],a[3],a[4]。注意,不存在数组元素a[5]。
  • (3)一般情况下,数组所有元素的类型必须相同,可以是Go语言的任何基本数据类型。

二、数组的初始化

当数组定义好以后,如果没有给数组元素指定值,则所有元素被自动初始化为0。对数组元素的初始化,可以使用以下几种方式实现。

(1)在定义数组时对数组元素赋初值。例如:

var a= [10]int{1,2,3,4,5,6,7,8,9,10}

        在给数组元素赋初值时,要将初值依次放在一-对“{}”内,上例的定义和初始化后,a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5,a[5]=6,a[6]=7,a[7]=8,a[8]=9,a[9]=10。

(2)可以只给一-部分元素赋初值。例如:

var b=[10] int{1,2,3,4,5}

        该例中数组一共有10个元素,只给前5个元素赋了初值,则后面5个元素默认初始化为“0”。

(3)可以由初始化列表决定数组长度。例如:

varc=[...] int{1,2,3,4,5}

        该例中数组长度为“...”标识符,即没有指定数组长度,数组长度由初始化列表决定,在“{}”中给定了5个元素的初值,所以数组长度为5。注意,使用这种方式时,不能省略标识符“...”,否则就变成切片了

(4)还可以按下标初始化元素。例如:

var d=[10] int{2:4,5:7}

该例中d[2]=4,d[5]=7,其他数组元素被初始化为0。

三、数组的遍历

        在Go语言中还可以使用range关键字,以方便地遍历数组中的元素。

func main() {
    var f= [20]int{1,1}
    for i : =2; i<20; i++{
        f[i]=f[i-2]+f[i-1]
    }
    for i,v := range f {
        if i%5 == 0 {
            fmt. Printf("\n" )
        }
        fmt.Printf("f[%2d]= %4d",i,v)
    }
}

        从上面的代码可以看到,range具有两个返回值,第一个返回值i是数组的下标,第二个返回值v是元素的值。

四、多维数组

        多维数组(Multidimensional-array),是指它的每一个元素也是类型相同的一维数组时,便构成了多维数组。所谓数组的类型相同是指数组大小、元素类型相同。数组的维数是指数组的下标个数,一维数组只有一个下标,二维数组有两个下标,多维数组则有多个下标。
例如:

var a[3][4]int

这条语句,数组a被定义成了二维的。也可以把数组a看作是一个特殊的一维数组,它的每一个元素又是一个一-维数组。比如本例数组a有三个元素: a[0]、a[1]、a[2],它 的每个元素又是一个包含4个元素的一-维数组,如下:
a[0]:a[0] [0] a[0] [1] a[0] [2]
a[1]:a[1] [0] a[1] [1] a[1] [2]
a[2]:a[2] [0] a[2] [1] a[2] [2]

五、注意

        需要特别注意的是,在Go语言中数组是一个值类型(ValueType),所有值类型变量在赋值或作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改数组的内容,因为函数内操作的只是数组的一个副本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值