一、数组的声明
在声明数组时,必须指定数组名、数组长度和数组类型,格式如下:
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),所有值类型变量在赋值或作为参数传递时都将产生一次复制动作。如果将数组作为函数的参数类型,则在函数调用时该参数将发生数据复制。因此,在函数体中无法修改数组的内容,因为函数内操作的只是数组的一个副本。