在低层次上,不存在多维数组这样的东西。只有一块平坦的内存块,足够大以容纳给定数量的元素。在 C 语言中,多维数组在概念上是其元素也是数组的数组。所以如果你这样做:
int array[2][3];
从概念上讲,你最终会得到:
array[0] => [0, 1, 2]
array[1] => [0, 1, 2]
这导致元素在内存中连续排列,因为array[0]
and array[1]
实际上并不保存任何数据,它们只是对两个内部数组的引用。请注意,这意味着只有[0, 1, 2]
条目实际上占用内存空间。如果将此模式扩展到下一个维度,您可以看到:
int array[2][3][2];
...将为您提供如下结构:
array[0] => [0] => [0, 1]
[1] => [0, 1]
[2] => [0, 1]
array[1] => [0] => [0, 1]
[1] => [0, 1]
[2] => [0, 1]
它继续在内存中连续排列元素(如上所述,只有[0, 1]
条目实际上占用内存中的空间,其他所有内容只是对这些条目之一的引用的一部分)。正如您所看到的,无论您有多少个维度,这种模式都会持续下去。
只是为了好玩:
int array[2][3][2][5];
给你:
array[0] => [0] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[1] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[2] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
array[1] => [0] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[1] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]
[2] => [0] => [0, 1, 2, 3, 4]
[1] => [0, 1, 2, 3, 4]