【问题标题】:When declaring a multi-dimensional array in C++, why do you only have to specify a size for the second dimensions?在 C++ 中声明多维数组时,为什么只需要指定第二维的大小?
【发布时间】:2020-08-04 01:16:32
【问题描述】:

例如,为什么 arr[ ][5] 可以,但 arr[5][ ] 不行?这个想法如何扩展到更大的维度?例如,你能合法地将一个三维数组定义为 arr[ ][ ][5] 吗?

我只是第一次了解 MDA,我很难理解这一点,所以我很想听听解释/演练。谢谢!

【问题讨论】:

  • 使用std::vector。如果需要多维,请将std::vector 作为成员变量放入包装类中,以将索引转换为平面向量。

标签: c++ arrays multidimensional-array


【解决方案1】:

为什么 arr[ ][5] 可以,但 arr[5][ ] 不行?

因为如果您有“任意数量的 5 件物品组”,您可以将它们全部连续放置在内存中并准确知道每个物品的去向 - 第一组 5 件物品放在某个地方,然后下一组 5 件物品- 之后的空间价值,依此类推。但是如果你有“5组任意数量的东西”,那么你就不会提前知道第二组和后续组需要去哪里。此外,您不能保证所有组的大小都相同,而矩形数组应该是这样工作的。

【讨论】:

    【解决方案2】:

    为什么 arr[ ][5] 可以,但 arr[5][ ] 不行?

    这与指针算法有关。

    当您编写arr[ ][5] 时,编译器知道arr 是一个数组,例如每个项目是5 个int 的数组。因此它可以做类似arr++ 的事情,这基本上意味着指向5 int 的“下一个”数组的指针。这是可能的,因为辅助数组的大小是已知的。

    当您编写 arr[5][ ] 时,编译器永远不会知道辅助数组的大小,因此它不能像arr++ 那样进行任何指针运算

    这个想法如何扩展到更大的维度?例如,你能合法地将一个三维数组定义为 arr[ ][ ][5] 吗?

    不,所有尺寸都必须是明确的,除了第一个维度。

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 2012-09-30
      • 1970-01-01
      • 2020-03-06
      • 2012-11-10
      • 2012-03-12
      • 2020-10-22
      • 1970-01-01
      相关资源
      最近更新 更多