在 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 数组的主要内容,如果未能解决你的问题,请参考以下文章