c++ - 在 C/C++ 中分配给 int[][4]

标签 c++ arrays multidimensional-array

如何在不将 [][] 转换为 ** 的情况下分配给多维数组?我在下面有一个例子。我发现的是 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/

相关文章:

c - 如何在 C 中复制字符串并返回其地址,将其分配给指针并打印新字符串?

javascript - 如何使用代理合并数组中的相同项目?

java - 如何判断数组下标是否为偶数?

c++ - 正常或通过函数访问类的变量

c++ - 指向存储在 map 容器中的数据的指针

c++ - 链接器错误 Lua 5.1

javascript - 将数组转换为字符串,同时按对分组

c++ - 没有图像的词袋

c++ - 正确地将值输入二维数组?

javascript - 如何在 JavaScript 中垂直比较数组中的字符串