一、数组的概念
数组是具有相同唯一类型的一组已编号且长度固定的数据项序列
首先类型唯一
,也就是说如果我定义的数组类型是int,那么就不能存储 int 类型以外的其他类型。长度固定
,也就是如果我定义的数组长度为 6 ,那么我最多只能往数组里面添加6个元素。那么可不可以少于6个元素,可以,但实际上,如果少于 6 那么默认会以该类型的默认值添加到 6 个元素为止。所以长度固定。最后一个关键词 序列
,序列表示数组里的元素将会有顺序,所以有数组操作中经典的索引操作。
二、声明数组
基于上面的概念,我们需要指定类型,指定长度。完整的数组声明如下
var array_name [array_size] array_type
举个栗子:声明一个最多存储10个学号的数组
var strudent_no [10] int
三、数组的初始化
数组的初始化我们可以采用字面量的方式进行。如下面的代码
var strudent_no = [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
此时{}中的元素个数不能大于我们定义的数组长度[10],可以少于或者等于,少于相当于默认将后面的元素设置为 0(int 类型的默认值)。如下面的代码
func main() {
//定义一个长度为6的数组,但是我们初始化只给了4个元素
var student_no_arr = [6]int{1, 2, 3, 4}
for index, value := range student_no_arr {
fmt.Printf("index=%d,value=%d\n", index, value)
}
}
上面代码使用了 for 循环的 range 形式,可以遍历数组,使用简单两个参数分别接收数组的索引和对应的值。输出的结果如下
index=0,value=1
index=1,value=2
index=2,value=3
index=3,value=4
index=4,value=0
index=5,value=0
可以看到最后的第5和第6个元素使用了默认值 0。除了上面的初始化方式之外我们还可以省略数组的长度进行初始化。如下:
var student_no_arr = [...]int{1, 2, 3, 4}
...
表示省略,此时长度将由系统根据后面的{}中的元素个数进行推断。
四、数组元素的访问
上面我们使用了 for 循环的 range 格式进行了一次遍历,其实本质上都是通过索引去访问数组元素。不使用range格式我们可以这样进行:
func main() {
var student_no_arr = [...]int{1, 2, 3, 4}
//len(array)返回数组的长度
for i := 0; i < len(student_no_arr); i++ {
fmt.Printf("index = %d,value = %d \n", i, student_no_arr[i])
}
}
student_no_arr[index]
表示访问该索引位置的元素,获取数组长度的函数为 len()
五、多维数组
多维数组简单来讲就是数组里面存放的元素又是数组。声明方式如下
var array_name [SIZE1][SIZE2]...[SIZEN] array_type
举个栗子
var arrays = [3][4][5] int
多维数组中比较常用的应该属二维数组
var array_name [SIZE1][SIZE2] array_type
eg:
var arrays = [3][2]int{
{1,2},
{3,4},
{4,5},
}
访问二维数组中的元素,如下
arrays[2][0] //4
遍历二维数组
func main() {
var arrays = [3][2]int{
{1, 2},
{3, 4},
{4, 5},
}
for i := 0; i < len(arrays); i++ {
for j := 0; j < len(arrays[i]); j++ {
fmt.Printf("arrays[%d][%d] = %d \n", i, j, arrays[i][j])
}
}
}
输出结果为
arrays[0][0] = 1
arrays[0][1] = 2
arrays[1][0] = 3
arrays[1][1] = 4
arrays[2][0] = 4
arrays[2][1] = 5