C中的2d数组固定宽度但未知高度?

时间:2011-09-29 05:11:29

标签: c arrays 2d

是否可以制作一个高度未知但设定宽度的数组?

所以它可以是:

|----------8-----------|

[0][0][0][0][0][0][0][0]  |
[1][1][1][1][1][1][1][1]  |
[2][2][2][2][2][2][2][2]  |
[3][3][3][3][3][3][3][3] \|/

因此它可以像它需要的那样大,但是可以保持8个浮点数。

我觉得声明看起来有点像:

    float *array[8] // maybe???

    float array[8][] // idk???

我不习惯var上的多个指针(我仍然感到困惑)。我经常使用apple的cocoa框架所以我通常会使用NSArray但是我正在构建的东西需要一个基于C的数组而不是一个类。

4 个答案:

答案 0 :(得分:4)

试试这个:

float (*array)[8];

...将array声明为指向浮动的8元素数组的指针。

然后您可以按如下方式为整个事物分配空间:

array = malloc(sizeof(*array) * num_elements);

然后,例如,array[3][0]将访问第4个8个浮点数组中的第一个浮点数。

答案 1 :(得分:3)

float *array[8];

现在你有一个包含8个float指针的数组。

对于其中的每一个,当你知道它需要多大时,你需要分配空间:

array[0] = calloc(numMembers, sizeof(float));

如果您后来决定需要更大的特定第二维,则需要重新分配。

答案 2 :(得分:0)

是的,绝对是:

  float *p2DArray[8];

  for (int i = 0; i < HEIGHT; ++i) {
    p2DArray[i] = (float*)malloc(sizeof(float)*WIDTH);
  }

取自Multi-Dimensional Arrays

答案 3 :(得分:0)

作为函数的参数,您可以要求一个未知高度的二维数组,如此

void foo(int arr[][8])
{
     //...do stuff with arr...
}