MST

星途 面试题库

面试题:Go语言多维数组在内存中的存储方式及特点

描述Go语言中多维数组在内存中的存储方式,并说明这种存储方式对多维数组操作(如遍历、访问特定元素)的影响,同时举例说明如何高效地遍历一个二维数组。
37.8万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

多维数组在内存中的存储方式

在Go语言中,多维数组本质上是数组的数组。例如,二维数组 [m][n]T 实际上是由 m 个类型为 [n]T 的一维数组组成。这些一维数组在内存中是连续存储的,整体呈现线性排列。

对多维数组操作的影响

  1. 遍历:由于内存的连续性,按行遍历多维数组效率较高。因为这样的遍历顺序与内存中数据的存储顺序一致,减少了内存的跳跃访问,提高了缓存命中率。
  2. 访问特定元素:访问特定元素 arr[i][j] 时,计算偏移量相对简单。先根据外层数组索引 i 找到对应的内层数组起始位置,再根据内层数组索引 j 找到具体元素,时间复杂度为 O(1)。

高效遍历二维数组示例

package main

import "fmt"

func main() {
    // 初始化一个二维数组
    arr := [][]int{
        {1, 2, 3},
        {4, 5, 6},
        {7, 8, 9},
    }

    // 按行遍历
    for _, row := range arr {
        for _, val := range row {
            fmt.Print(val, " ")
        }
        fmt.Println()
    }
}

上述代码通过两个嵌套的 for... range 循环按行遍历二维数组,这是一种高效的遍历方式。