如何在不将 [][] 转换为 ** 的情况下分配给多维数组?我在下面有一个例子。我发现的是 How do I declare a 2d array in C++ using new?但它使用 int**
而不是 new int[][4]
。
#include<cassert>
int a[8][4];
int*b = &a[0][0];
int*c = &a[2][0];
int*d = &a[0][2];
int main() {
//shows right side is closer
assert(d-b==2);
assert(c-b==8);
auto aa = new int[][4];
//set the right side, but is a syntax error
//aa[][0] = new int[8];
//type error
aa[0] = new int[8];
}
最佳答案
您应该在 new
int[][4]
行上收到错误. []
中必须有一个表达式.
否则,编译器怎么知道要分配多少。
(用 VC++ 进行一些快速检查,它错误地接受了这个
表达式,表明它将其视为等同于 new
int[0][4]
, 并分配 0 个字节。它不编译
g++.)
当然,您还可以通过滥用来混淆事物
auto
. 从不使用 auto
的原因之一是你不
知道实际类型,并且 auto
意味着你不必知道
(当然,直到你想使用变量)。在这种情况下,
你绝对不应该使用 auto
,因为类型有点
特别的,你想让你的读者知道:
int (*aa)[4] = new int[8][4];
一旦你看到这个,很明显 aa[0]
有类型
int[4]
,你无法为它分配一个指针,
因为它不是指针。
当然,在 C++ 中,无论如何您永远不会编写这样的东西。
你会定义一个 Matrix2D
类,并使用它。 (而且它会
可能使用 std::vector<int>
获取内存,以及
从你给出的两个计算单一指数。在内部,
当然,所以你不必考虑它。)有,在
事实上,从来没有使用数组 new
的情况.
关于c++ - 在 C/C++ 中分配给 int[][4],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18723466/