【问题标题】:Jagged 3D array creation in C在 C 中创建锯齿状 3D 数组
【发布时间】: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],确定吗?另请参阅此问题:stackoverflow.com/questions/62512stackoverflow.com/questions/8902055
  • 我只是使用了子维度作为例子,在实际程序中可能会有所不同。抱歉没有说清楚。不管怎样,现在开始工作了.. @unwind:是的,我猜它是一种 mip-map..实际上我正在为多网格方法编写代码。 A 是存储不同网格的所有值的矩阵

标签: c jagged-arrays multidimensional-array


【解决方案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 循环内的暗淡。谢谢
猜你喜欢
  • 2011-06-10
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多