Golang二维数组

二维数组

二维数组入门案例:

func main() {
	//转置
	var a1 = [3][4]int{
		{1, 2, 3, 6},
		{4, 5, 6, 15},
		{7, 8, 9, 24}}

	b1 := [4][3]int{}
	for i := 0; i < 3; i++ {
		for j := 0; j < 4; j++ {
			if i != j {
				b1[j][i] = a1[i][j]

			} else {
				b1[j][i] = a1[i][j]
			}
		}
	}
	fmt.Println(b1)

	b2 := b1
	//二维数组遍历方式
	for i := 0; i < 4; i++ {
		for j := 0; j < 3; j++ {
			fmt.Printf("%v ", b2[i][j])
		}
		fmt.Println()
	}
}

语法:var 数组名 [大小][大小]类型,例如var a1 [2][2]int;var a1 [...][3]int二维数组仅支持第一维可以使用[...]不明确大小,二维必须有明确大小。同样也支持类型推导形式,b1=[3][4]int
二维数组在内存的存在形式
1.二维数组的本质是多个一维数组
2.二维数组的地址等于其第一个一维数组的地址等于一位数组首个元素的地址
3.一维数组间地址的间隔等于列数*类型所占字节。例如,arr[0]的地址为0xc0000c0060,arr[1]的地址为0xc0000c0078,两者间隔24个字节(列数3,int类型 8个字节)

arr := [2][3]int{{1, 2, 3}, {4, 5, 6}}

	fmt.Printf("arr的地址为%p\n", &arr)             //arr的地址为0xc0000c0060
	fmt.Printf("arr[0]的地址为%p\n", &arr[0])       //arr[0]的地址为0xc0000c0060
	fmt.Printf("arr[0][0]的地址为%p\n", &arr[0][0]) //arr[0][0]的地址为0xc0000c0060
	fmt.Printf("arr[1]的地址为%p\n", &arr[1])       //arr[1]的地址为0xc0000c0078
	fmt.Printf("arr[1][0]的地址为%p\n", &arr[1][0]) //arr[1][0]的地址为0xc0000c0078

}

在这里插入图片描述

二维数组遍历
1.for循环
2.for-range循环

func main() {
	//演示二维数组的遍历
	var arr = [2][3]int{{1, 2, 3}, {4, 5}} //arr[1][2]默认为0

	//for循环遍历
	for i := 0; i < len(arr); i++ {//第一维长度
		for j := 0; j < len(arr[i]); j++ {
			fmt.Printf("%v ", arr[i][j])
		}
		fmt.Println()
	}
	//for range 循环遍历
	for i, v := range arr {
		for j, v1 := range v {
			fmt.Printf("arr[%v][%v]=%v ", i, j, v1)
		}
		fmt.Println()
	}
}

Output
1 2 3
4 5 0
arr[0][0]=1 arr[0][1]=2 arr[0][2]=3
arr[1][0]=4 arr[1][1]=5 arr[1][2]=0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值