c++ - 是否可以创建 3d 数组的指针数组?

标签 c++ c arrays pointers 3d

我有 3 个数组,A[5][3][5]B[5][4][5]C[5 ][2][5]。 是否可以通过指针数组访问它们,而它们的第二维不同?像这样的东西:

int A[5][3][5], B[5][4][5], C[5][2][5];
int ***D[3];
D[0] = A;
D[1] = B;
D[2] = C;

我知道这是错误的,我只是想知道是否可以通过一个数组访问它们?

最佳答案

不,如果第二个维度不同,它将无法工作。你能做的最好的事情是这样的:

struct arr {
    int *p; // pointer to first element
    int x, y, z; // array size
    int &at(int i, int j, int k) {
        return p[((i*y)+j)*z+k];
    }
}

或者您可以使用您喜欢的多维数组库。 C++ 缺乏对多维数组的内置支持,除非在编译时已知除第一个大小之外的所有数组,并且 C99 VLA 在这种情况下不起作用。这是因为C/C++使用数组的类型来计算它在每个维度中有多大(除了第一个维度,它可以是未指定的)。

关于c++ - 是否可以创建 3d 数组的指针数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23661327/

相关文章:

arrays - 如何在 perl 中将数组值拆分为单独的数组

c++ - 如何使用我现有的代码创建用户定义的 vector 大小?

c - UNIX 套接字连接被拒绝

c# - 如何将结构数组从 C++ dll 返回到 C#

c++ - Malloc 或 Calloc 以及何时

c - 如何使用 autotools 设置项目,以便生成的可执行文件可以看到所需的二进制文件?

c - 在 C 中获取一个文件并返回一个数组

javascript - 在 Javascript 中使用 reduce() 时测试是否到达数组的最后一项

c++ - std::function 函数与函数指针

c++ - 将项目推送到 STL 容器后出现段错误