【问题标题】:What array structure is in C# but not in C/C++/Java? [closed]什么数组结构在 C# 中,但在 C/C++/Java 中没有? [关闭]
【发布时间】:2015-08-18 22:31:48
【问题描述】:

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

C# 中的数组有三种形式:一维、多维矩形数组(如 C++ 多维数组)和交错数组(数组的数组)。

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

【问题讨论】:

  • C 和 C++ 也有锯齿状数组。您需要专门创建它。
  • 为什么投反对票?这不是一个非常糟糕的问题......他本可以做一些研究......但我不认为它是那么糟糕。
  • @hacks,没关系。我需要一个关于仅存在于 C# 中的数组结构的答案,如果 Java 中存在锯齿状数组,我不在乎它也存在于 C++ 中,反之亦然。

标签: java c# c++ c array-difference


【解决方案1】:

C++

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

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

C++ 两者都有...你显然可以创建一个int**,它是一个指向指针的指针(所以是指针的“数组”,所以是“数组”的“数组”),就像在 C# 中一样,你可以有一个int[][],即int[] 的数组。对于 C++,请参阅各种示例 here。请注意,此语法比 C++ 更 C... 在 C++ 中,您应该使用 std::array,例如 here

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

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

Java

Java 没有多维数组(请参阅here)。它确实有锯齿状数组,但有一个技巧:如果你愿意,你可以在一个命令中初始化一个所有元素大小相同的锯齿状数组如果它们有不同的大小/其中一些可以是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

【讨论】:

  • 是的,这就是问题所在,我已经阅读了很多相同的内容,我需要一个关于 C# 中存在什么数组结构的答案。那么非零下限会被认为是好的答案吗?对我来说,这只是一些细微的差别,而不是完全不同的数组结构。
  • @Erndob 非零下限是一个复杂的野兽......你不能直接在 C# 中创建它们,你必须使用 Array.CreateInstance 来创建它们......并且它们的类型是与其他多维数组的类型相同(一维非零下界除外,它使用特殊的数组类型)。所以它们属于同一个“家族”的多维数组(因为它们使用相同的 CLR 内部类)。
  • @Erndob 最后在 .NET 中有两种类型的数组:“简单数组”:以 0 开头的一维数组,“慢复杂数组”:多维或非 0 索引或两个都。锯齿状数组是一种过度结构,您可以将它们放在两者上,因为锯齿状数组是数组的数组。
  • 我是这么认为的,那么 c# 中的数组结构是什么,而 java/c++/c 中没有呢?因为我读过一堆,这个线程中的人回答了相同的事情,而不是不同的事情。还是只是个坏问题?
  • @Erndob 看决赛桌
猜你喜欢
  • 1970-01-01
  • 2013-02-12
  • 1970-01-01
  • 2019-08-05
  • 2018-12-22
  • 2013-02-12
  • 2011-02-06
  • 2014-10-29
  • 1970-01-01
相关资源
最近更新 更多