golang中的二维数组(规则与不规则分析)

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]中保存的是第一行的首地址
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值