【问题标题】:What is the type of new int[M][N]?new int[M][N] 的类型是什么?
【发布时间】:2016-01-24 11:03:49
【问题描述】:

根据typeid(array).name() 在 G++ 4.8.4 中是PAN_i。我知道P 表示指针,i 表示 int,但 A 是什么类型,为什么只有第二维 - N - 而不是第一个 - M

我应该在auto array = new int[M][N] 中输入什么而不是 auto?

有没有办法将array 分配给int**

另一个问题是 M 和 N 必须是编译时常量。如果不是,我想我唯一的选择是the dynamic C++03 2D arrays

【问题讨论】:

  • 这将有助于了解编译器,因为name 返回一个由实现定义的字符串,请参见此处:en.cppreference.com/w/cpp/types/type_info/name
  • 编译器为 GCC 4.8.2。在 MinGW 4.9.2 中也是如此。
  • 我不认为你可以从 new int[M][N] 开始(虽然,也许在 C++11 中你可以)。但是您可以声明typedef int[M][N] MyArray_t,然后使用new MyArray_t(假设MN 是常量)。无论如何,在 C++ 中你也可以使用vector<vector<int>>。否则,如果你仍然坚持使用原生(C 风格)数组,那么这种情况下的类型应该是int**
  • @barakmanos 我认为没关系。并且只有 N 必须是编译时间常数。
  • 我将此问题标记为可能与 stackoverflow.com/questions/81870/… 重复。此外,您在一个问题中提出了三个不同的问题,其标题并未涵盖所有问题。

标签: c++ arrays c++11 dynamic multidimensional-array


【解决方案1】:

new int[M][N]的类型是什么?

类型是指向长度N int数组的指针1,或者

int (*)[N]

如果您想到new[] 表达式的作用,它会初始化一个在运行时给定长度的数组,并返回一个指向该数组第一个元素的指针。所以类型

new T[M]

T*。在二维情况下,您可以将T 视为int[N]。所以数组的每个元素都是一个自身数组,new 返回一个指向其第一个元素的指针。这可能是一种更清晰的表达方式:

typedef int ArrayN[N];

auto array = new ArrayN[M];

1 在 C++ 中,如果 C 样式数组的维度必须是编译时常量,则意味着 N 必须是常量表达式

【讨论】:

  • 您可能还想建议使用typedef int MyArray_t[M][N],在这种情况下也许还建议使用vector<vector<int>>
  • 我必须使用bool**来表示结构。
  • @barakmanos 我可能会这样做。但我不喜欢坚持每个帖子回答一个问题,因为他们应该只问一个问题。
  • 这是回答。我将分别问其他问题。
  • @barakmanos 我添加了一个typedef 示例,但仅限于一维数组,因为这是使用新表达式创建的数组元素的类型。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-31
  • 1970-01-01
  • 2015-09-28
  • 1970-01-01
  • 2020-02-23
相关资源
最近更新 更多