Joh*_*itb 6 c language-agnostic multidimensional-array
我在C++聊天中与某人进行了语言无关的讨论,他说数组和多维数组是两件事.
但是从我学到的东西来看,多维数组只不过是一个大小相同的其他数组的数组.他特别说
好吧,他们有点在C中,你用嵌套数组模拟多个维度但这只是因为C实际上不支持多维数组
有人可以解释一下"多维数组"的规范计算机科学定义是什么以及为什么C(或抽象定义"数组数组")不符合该定义?
以.NET数组为例,很好地说明了这一点:
C#区分以嵌套方式定义的锯齿状数组:
int[][] jagged = new int[3][];
Run Code Online (Sandbox Code Playgroud)
每个嵌套数组可以具有不同的长度:
jagged[0] = new int[3];
jagged[1] = new int[4];
Run Code Online (Sandbox Code Playgroud)
(并注意其中一个嵌套数组根本没有初始化,即null
.)
相比之下,多维数组定义如下:
int[,] multidim = new int[3, 4];
Run Code Online (Sandbox Code Playgroud)
在这里谈论嵌套数组是没有意义的,实际上尝试访问multidim[0]
将是一个编译时错误 - 你需要访问它提供所有维度,即multidim[0, 1]
.
它们的类型也不同,正如上面的声明所揭示的那样.
此外,他们的处理完全不同.例如,您可以使用以下类型的对象迭代上面的锯齿状数组int[]
:
foreach (int[] x in jagged) …
Run Code Online (Sandbox Code Playgroud)
但迭代多维数组是使用以下类型的项完成的int
:
foreach (int x in multidim) …
Run Code Online (Sandbox Code Playgroud)
从概念上讲,锯齿状数组是一个数组数组(...数组数组...无限制),T
而多维数组是一个T
具有set访问模式的数组(即索引是一个元组).