在 C 中创建锯齿状 3D 数组

Posted

技术标签:

【中文标题】在 C 中创建锯齿状 3D 数组【英文标题】:Jagged 3D array creation in C 【发布时间】:2012-02-09 13:18:26 【问题描述】:

我正在尝试使用 C 创建一个动态 3D 数组。 这个想法是创建一个看起来像这样的 3D 数组

A[0][128][128]
A[1][64][64]
A[2][32][32]
A[3][16][16]
A[4][8][8]
.....
A[n][1][1]

n,128,128 是输入。

谁能建议如何做到这一点?

【问题讨论】:

这不是一个锯齿状数组,如果子维度都是恒定的大小。直接说new AType[n][128][128],确定吗?另请参阅此问题:***.com/questions/62512 和 ***.com/questions/8902055 我只是使用了子维度作为例子,在实际程序中可能会有所不同。抱歉没有说清楚。不管怎样,现在开始工作了.. @unwind:是的,我猜它是一种 mip-map..实际上我正在为多网格方法编写代码。 A 是存储不同网格的所有值的矩阵 【参考方案1】:

以下函数为您的动态数组分配内存。 elem_size是每个元素的大小,n是第一个维度的大小,其他两个维度是128的大小。

void* create_3Darray(size_t elem_size, size_t n) 
    return malloc(elem_size * n * 128 * 128);

用法:

int ***arr = create_3Darray(sizeof(int), 256);
arr[2][5][12] = 12;

您可以将malloc 替换为calloc 以将元素初始化为0,否则数组可能会被随机值填充。

此外,您应该注意不要在数组/维度边界上读取/写入。

【讨论】:

如果我理解正确,我仍然会有一个像 arr[0][5][12] 这样的 3D 数组; arr[1][5][12] ; arr[2][5][12] ..所以在这种情况下,每个 arr[n] 我仍然有一个 5X12 2D 数组我想要做的可能是一个锯齿状的 3D 数组 是的,你是对的,它是一个简单的 3D 数组,而不是锯齿状的。对于锯齿状数组,您需要每个必须传递给分配函数的子数组的大小信息。 得到它的工作,不得不改变 for 循环内的暗淡。谢谢

以上是关于在 C 中创建锯齿状 3D 数组的主要内容,如果未能解决你的问题,请参考以下文章

使用传入的参数在 C++ 中创建 3D 数组

如何在python中创建3D高度图

初始化锯齿状数组

如何在 Unity3d 检查器中显示锯齿状数组?

在Objective C中创建JSON数组[重复]

在Matlab中创建一个平滑的网格