1、golang中的二维数组与java中的二维数组极为相似,且都支持不规则二维数组
撸码:
package main
import (
"fmt"
)
/**
* @Description:二维数组
* @Author: guai
* @Date:2020/2/22 10:35
**/
func main() {
//1、二维数组快速入门
var intArr [4][6]int
//赋初值
intArr[1][2] = 1
intArr[2][1] = 2
intArr[3][1] = 3
//遍历二维数组
for i := 0; i < len(intArr); i++ {
for j := 0; j < len(intArr[i]); j++ {
fmt.Print(intArr[i][j], " ")
}
fmt.Println()
}
//分析二维数组在内存中的布局:
//根据结果可知 intArr[0]的地址和intArr[0][]的首地址即intArr[0][0]的地址 一样
//当通过*取出内存中的地址时你会发现,取出的时intArr[0]这一行中的值
fmt.Printf("intArr[0]中保存的地址%p\n", *&intArr[0])
fmt.Printf("intArr[0][0]的地址%p\n", &intArr[0][0])
fmt.Printf("intArr[0]的地址%p\n", &intArr[0])
fmt.Printf("intArr[0][0]的地址%p\n", &intArr[0][0])
//在golang中支持不规则二维数组
var intArr1 [3][]int
intArr1[0] = []int{1, 2, 3}
intArr1[1] = []int{1, 2, 3, 4}
intArr1[2] = []int{1, 2, 3, 4, 5}
//遍历二维数组
for i := 0; i < len(intArr1); i++ {
for j := 0; j < len(intArr1[i]); j++ {
fmt.Print(intArr1[i][j], " ")
}
fmt.Println()
}
//分析不规则二维数组在内存中的布局:
//根据下面结果可知 intArr[0]的地址与intArr[0][0]的地址不一致,而是在intArr[0]中保存了
//intArr[0][0]的地址
fmt.Printf("intArr1[0]中保存的地址%p\n", *&intArr1[0])
fmt.Printf("intArr1[0][0]的地址%p\n", &intArr1[0][0])
fmt.Printf("intArr1[0]的地址%p\n", &intArr1[0])
fmt.Printf("intArr1[0][0]的地址%p\n", &intArr1[0][0])
}
2、撸码发现
在golang中的规则二维数组的arr[0]的地址与arr[0][0]的地址一致,通过*取出内存中的内容时发现
取出的是二维数组的第一列,即数组的arr[0]中保存的就是二维数组的第一列
而不规则二维数组中arr[0]的地址与arr[0][0]的地址不一致,通过*取出内存中的内容时发现取出的是二维数组的第一行的首地址即arr[0][0]的地址,说明不规则二维数组中arr[0]中保存的是第一行的首地址