数组的声明和初始化
var a [8]byte // 长度为8的数组,每个元素为一个字节
var b [3][3]int // 二维数组(9宫格)
var c [3][3][3]float64 // 三维数组
var d = [3]int{1, 2, 3} // 声明时初始化
var e = new([3]string) // 通过 new 初始化
a := [5]int{1,2,3,4,5}
a := [...]int{1, 2, 3} // 自动计算数组长度
// 如果没有填满,则空位会通过对应的元素类型零值填充:
a := [5]int{1, 2, 3} // [1 2 3 0 0]
//还可以初始化指定下标位置的元素值,未设置的位置也会以对应元素类型的零值填充:
a := [5]int{1: 3, 3: 7} // [0 3 0 7 0]
数组元素的访问与设置
arr := [5]int{1,2,3,4,5}
a1, a2 := arr[0], arr[len(arr) - 1]
arr[0] = 100
数组的遍历
for i := 0; i < len(arr); i++ {
fmt.Println("Element", i, "of arr is", arr[i])
}
for i, v := range arr {
fmt.Println("Element", i, "of arr is", v)
}//对于i, v,如果不需要可以通过匿名变量"_"替代
多维数组
// 通过二维数组生成九九乘法表
var multi [9][9]string
for j := 0; j < 9; j++ {
for i := 0; i < 9; i++ {
n1 := i + 1
n2 := j + 1
if n1 < n2 { // 摒除重复的记录
continue
}
multi[i][j] = fmt.Sprintf("%dx%d=%d", n2, n1, n1 * n2)
}
}
// 打印九九乘法表
for _, v1 := range multi {
for _, v2 := range v1 {
fmt.Printf("%-8s", v2) // 位宽为8,左对齐
}
fmt.Println()
}
数组的缺点:
- 长度固定,无法动态添加元素
- 数组为值类型,作为参数传递到函数时,传递的为值的拷贝
- 在函数中对数组元素进行修改后,不会影响原来的数组
- 数组很大时,值拷贝会降低程序性能