数组
数组是同一种数据类型的集合,数组在声明时就已经确定了数组元素的个数(大小)和数组元素的数据类型,且数组的大小不可变,必须为常量
数组通过下标访问,下标从0开始
数组的声明:
var 数组名称 [数组大小]数据类型
例如:
var arr [5]int 表示数组arr存储的是五个int类型的变量
arr的数据类型是 [5]int
注意:[5]int 和[6]int 是不同的数据类型,数组大小不同数据类型也不同
数组的初始化:
方法一:根据数组大小设置数组元素
var arr1 [5]int // [0 0 0 0 0]
声明时会将数组的每个元素默认为0,如果数组是[5]bool类型的话,数组的每个元素默认为false……默认值为数组元素类型的默认初始值
var arr2 = [5]int{1 ,2 ,3} // [1 2 3 0 0]
指定值初始化,数据不足时剩下的元素都为0
var arr3 = [5]int{1 ,2 ,3 ,4 ,5} // [1 2 3 4 5]
var arr4 = [5]int{1: 1,3: 3 } //[0 1 0 3 0]
可以按照索引赋值
方法二:编译器根据数组元素判断数组大小
var arr5 = [...]int{1 ,2 ,3} //[1 2 3]
此时len(arr5) = 3
var arr6 = [...]int{1: 1,3: 3 } //[0 1 0 3]
此时len(arr6) = 4
数组的遍历:
for遍历
for i := 0;i < len(arr6);i++ {
fmt.Println(arr6[i])
}
for range遍历
for i,v := range arr6 {
fmt.Printf(“%d %d ”,i,v)
}
多维数组
二维数组是数组元素为一维数组的数组
三维数组是数组元素为二维数组的数组
……
以二维数组为例:
声明格式:
var 数组名称 [二维数组包含的一维数组 的个数(二维数组的大小)][一维数组的大小]数据类型
例如:
var arr [3][2]int
初始化:
arr := [3][2]int{
{0 ,1}
{2 ,3} {4 ,5}
}
遍历:
for i1,v1 := range arr {
fmt.println(v1)
for i2,v2 := range v1 {
fmt.printf(“%d”,v2)
}
fmt.Println()
}
数组是值类型,赋值和传值时会复制整个数组,因此对副本进行操作,并不会影响原数组的值。
在日常使用中,我们并不十分常用数组,我们会使用切片,切片基于数组,当时可以改变大小,进行扩容。