什么数组结构在 C# 中而不在 C/C++/Java 中?

What array structure is in C# but not in C/C++/Java?

我正在准备考试,但有一个问题我找不到答案。读了一堆文章,我发现最接近的是

Arrays in C# come in three flavors: single-dimensional, multidimensional rectangular arrays (like the C++ multidimensional arrays), and jagged arrays (arrays of arrays).

所以这表明 C++ 中没有锯齿状数组,但它存在于 Java 中。 另一件事是,只有 C# 可以有非零数组下界(如 a[-1,3] 或 a[4,9]。它会被认为是不同的数组结构吗?

C++

  • 所以这表明 C++ 中没有锯齿状数组

通过相同的阅读,文本块表明 C++ 没有一维数组。这显然是荒谬的!

C++ 两者都有...你显然可以创建一个 int**,它是一个指向指针的指针(所以一个 "array" 的指针,所以一个 "array" 的 "arrays"),就像在 C# 中一样,你可以有一个 int[][],这是一个 int[] 的数组。对于 C++,请参阅各种示例 here. Note that this syntax is more C than C++... In C++ you should use std::array, like here.

  • 另一件事是只有 C# 可以有非零数组下界(如 a[-1,3] 或 a[4,9])

这在 C++ 中不存在...它们在 C# 中通过实现多维数组的相同代码在内部实现,并且由于历史原因而存在(与旧版本 VB 伪兼容)

Java

Java 没有多维数组(参见 here)。它确实有锯齿状数组,有一个技巧:如果你愿意,你可以初始化一个锯齿状数组,如果它们有不同的 sizes/some个可以是null,可以手动初始化。

int[][] num = new int[4][2];

int[][] num = new int[4][];
num[0] = new int[1];
num[1] = new int[2];
num[2] = new int[3];
num[3] = new int[4];

所以最后

                            C#    Java  C++   
single-dimensional array    x     x     x
multi-dimensional array     x           x
si.di. non-zero based array x
mu.di. non-zero based array x
jagged array                x     x     x