2d阵列混乱

fud*_*din 0 c

为什么2d数组的内存是由两个参数访问的,而不仅仅是一个(忽略指针).为什么内存图是按行和列而不是直的(水平),为什么它说为什么呢2d数组是一个数组的数组,但我不明白.

Cas*_*bel 7

这是关于方便.当然,内存实际上都是顺序的,但有时候人们希望能够访问具有两个索引的东西(例如实现矩阵).

考虑一个3x3阵列.想到这样的内存很方便:

----------------------------
| [0][0] | [0][1] | [0][2] |
|--------------------------|
| [1][0] | [1][1] | [1][2] |
|--------------------------|
| [2][0] | [2][1] | [2][2] |
----------------------------
Run Code Online (Sandbox Code Playgroud)

但在记忆中,它当然看起来像这样:

----------------------------------------------------------------------------------
| [0][0] | [0][1] | [0][2] | [1][0] | [1][1] | [1][2] | [2][0] | [2][1] | [2][2] |
----------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

我们只是把它分成几行,这样我们就可以很容易地把它理解为二维的.我们使用两个参数访问它,因为我们想要,因为这对我们的代码来说很方便.该语言提供了这种实现,这使得可以通过两个索引进行访问,即使它是线性的,也可以用一个索引访问.

这张图片还应该帮助您理解为什么它可以被视为一个数组数组.这是一个略微修改过的图片,重点是:

|||--------------------------|||--------------------------|||--------------------------|||
||| [0][0] | [0][1] | [0][2] ||| [1][0] | [1][1] | [1][2] ||| [2][0] | [2][1] | [2][2] |||
|||--------------------------|||--------------------------|||--------------------------|||
Run Code Online (Sandbox Code Playgroud)

如您所见,那里有三个一维数组.因此,当您编写时array[1],您指的是完整二维数组的第二个一维组件,即内存中的第二组三个组件.添加第二个索引,array[1][2]获取该一维数组的第三个元素,根据需要将您转到二维数组的单个元素.