多维数组的一些特点
-
数组属于值类型,多维数组的所有维度都会在创建时自动初始化零值
-
多维数组尤其适合管理具有父子关系或者与坐标系相关联的数据。
多维数组的声明语法:
var 数组变量名 [元素数量][元素数量][元素数量]...[元素数量]Type
声明二维数组
直接声明二维整型数组:
var arry [4][2]int
使用数组字面量来声明并初始化一个二维整型数组:
array = [4][2]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
声明并初始化指定的索引:
array = [4][2]int{1: {20, 21}, 3: {40, 41}}
声明并初始化指定元素:
array = [4][2]int{1: {0: 20}, 3: {1: 41}}
多维数组的内存模型
代码示例:
package main
import "fmt"
var array [4][3]int
func main() {
array = [4][3]int{{10, 11}, {20, 21}, {30, 31}, {40, 41}}
fmt.Println(array)
array = [4][3]int{1:{0, 21}, 3:{1:41}}
fmt.Println(array)
}
访问多维数组的元素
根据对应的索引一层一层的去访问:
var arrays [2][2]int
func main(){
arrays[0][0] = 10
arrays[0][1] = 20
arrays[1][0] = 30
arrays[1][1] = 40
for i, j := range arrays {
fmt.Printf("第%d位的值是%d
", i, j)
}
}
数组之间的赋值需要类型一致--->数组长度、元素中数据的类型:
package main
import "fmt"
func main() {
var array [2][2]int
var arrays [2][2]int
arrays[0][0] = 10
arrays[0][1] = 20
arrays[1][0] = 30
arrays[1][1] = 40
array = arrays
for i, j := range array {
fmt.Printf("第%d位的值是%d
", i, j)
}
}
因为数组是值类型,所以可以独立的复制某个维度:
package main
import "fmt"
func main(){
var array2 [2]int = arrays[0]
var value int = arrays[0][1]
for j, k := range array2 {
fmt.Printf("第%d位的值是%d
", j, k)
}
fmt.Println(value)
}