【问题标题】:2d array in C. Fixed width but unknown height?C中的二维数组。固定宽度但未知高度?
【发布时间】:2011-11-27 09:47:09
【问题描述】:

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

所以它可以是这样的:

|----------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 上的多个指针(我仍然感到困惑)。我经常使用苹果的可可框架,所以我通常会使用 NSArray 但我正在构建的东西需要一个基于 C 的数组而不是一个类。

【问题讨论】:

  • 高度和宽度是什么意思?数组[宽度][高度]还是数组[高度][宽度]?

标签: c arrays 2d


【解决方案1】:

试试这个:

float (*array)[8];

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

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

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

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

【讨论】:

  • 谢谢。我从没想过会使用括号。正如我对布赖恩所说,我希望我能选择 2 个答案。谢谢。
【解决方案2】:
float *array[8];

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

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

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

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

【讨论】:

  • 因为我的大脑经常不能用手指很好地交流 :) 谢谢 - 已修复。
  • @BrianRoach Dude 我经常在这个网站上看到你。我要感谢你为我和这个社区的其他成员提供的所有帮助。我希望我可以选择 2 个答案。再次感谢您。
  • 谢谢 :) 通过帮助别人,我学到了很多东西。还可以帮助我防止一些我每天在工作中不使用的技能完全生锈(比如我的 C )。
【解决方案3】:

是的,它肯定是:

  float *p2DArray[8];

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

取自Multi-Dimensional Arrays

【讨论】:

  • 非常正确:P 我一看到 C++ 代码就改了,哈哈,太多的 C++ 对 C 编程不利。
  • @Serdalis 我知道你的感受。我花了 6 个月的时间进行汇编,当我回到 C 语言时,我觉得指针太复杂了。 XD
【解决方案4】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-16
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2012-05-14
    • 2020-08-30
    相关资源
    最近更新 更多