【第三十八篇】GO 二维数组使用和内存布局

112 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第29天,点击查看活动详情

一、使用方式一 :先声明/定义,再赋值

  1. 语法:var 数组名【大小】【大小】类型
  2. 比如:var arr【2】【3】int ,再赋值
  3. 案例演示:
package main

import "fmt"

func main() {

	var arr2 [2][3]int // 以这个为例来分析arr2 在内存中的布局!!
	arr2[1][1] = 10
	fmt.Println(arr2)

	fmt.Printf("arr2[0]的地址%p\n", &arr2[0])
	fmt.Printf("arr2[1]的地址%p\n", &arr2[1])

	fmt.Printf("arr2[0][0]的地址%p\n", &arr2[0][0])
	fmt.Printf("arr2[1][0]的地址%p\n", &arr2[1][0])
}

  1. 二维数组在内存的存在形式(重点)

package main

import "fmt"

func main() {

	var arr2 [2][3]int // 以这个为例来分析arr2 在内存中的布局!!
	arr2[1][1] = 10
	fmt.Println(arr2)

	fmt.Printf("arr2[0]的地址%p\n", &arr2[0])
	fmt.Printf("arr2[1]的地址%p\n", &arr2[1])

	fmt.Printf("arr2[0][0]的地址%p\n", &arr2[0][0])
	fmt.Printf("arr2[1][0]的地址%p\n", &arr2[1][0])

	var arr3 [2][3]int = [2][3]int{{1, 2, 3}, {4, 5, 6}}
	fmt.Println("arr3 = ", arr3)
}


二、使用方式二 :直接初始化

  1. 声明:var 数组名【大小】【大小】类型 = 【大小】【大小】类型{{初值....},{初值....}}
  2. 赋值(有默认值,比如 int 类型的就是0)
  3. 使用演示

说明:二维数组在声明/定义时也对应有四种写法【和一维数组类似】

  1. var 数组名【大小】【大小】类型 = 【大小】【大小】类型{{初值....},{初值....}}
  2. var 数组名【大小】【大小】类型 = 【...】【大小】类型{{初值....},{初值....}}
  3. var 数组名 = 【大小】【大小】类型{{初值....},{初值....}}
  4. var 数组名 = 【...】【大小】类型{{初值....},{初值....}}

三、二维数组的遍历

一、双层 for 循环完成遍历

package main

import "fmt"

func main() {

	// 演示二维数组的遍历
	var arr3 = [2][3]int{{1, 2, 3}, {4, 5, 6}}

	// for 循环来遍历二维数组
	for i := 0; i < len(arr3); i++ {
		for j := 0; j < len(arr3[i]); j++ {
			fmt.Printf("%v\t", arr3[i][j])
		}
		fmt.Println()
	}
}


二、for - range 方式完成遍历

package main

import "fmt"

func main() {

	// 演示二维数组的遍历
	var arr3 = [2][3]int{{1, 2, 3}, {4, 5, 6}}

	// for - range 来遍历二维数组
	for i, v := range arr3 {
		for j, v2 := range v {
			fmt.Printf("arr3[%v][%v] = %v\t\n", i, j, v2)
			fmt.Printf("i = %v	v =%v ", i, v)
		}
	}
}