为了账号安全,请及时绑定邮箱和手机立即绑定

如何在C中处理动态多维数组?

如何在C中处理动态多维数组?

C
红颜莎娜 2019-06-28 17:28:27
如何在C中处理动态多维数组?有人知道我如何使用C来动态分配多维数组吗?这有可能吗?
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

使用动态分配,使用malloc:

int** x;x = malloc(dimension1_max * sizeof(int*));for (int i = 0; i < dimension1_max; i++) {
  x[i] = malloc(dimension2_max * sizeof(int));}[...]for (int i = 0; i < dimension1_max; i++) {
  free(x[i]);}free(x);

这将分配一个大小为2D的数组。dimension1_max * dimension2_max..例如,如果您想要一个640*480数组(F.E。),使用dimension1_max = 640, dimension2_max=480。然后,可以使用x[d1][d2]哪里d1 = 0..639, d2 = 0..479.

但是搜索so或google也会发现其他可能性,例如在这个问题上

请注意,在这种情况下,您的数组不会分配一个连续的内存区域(640*480字节),这可能会给假设这种情况的函数带来问题。因此,要使数组满足条件,请将上面的malloc块替换为:

int** x;int* temp;x = malloc(dimension1_max * sizeof(int*));temp = malloc(dimension1_max * dimension2_max * sizeof(int));for (int i = 0; i < dimension1_max; i++) {
  x[i] = temp + (i * dimension2_max);}[...]free(temp);free(x);


查看完整回答
反对 回复 2019-06-28
?
慕神8447489

TA贡献1780条经验 获得超1个赞

自C99以来,C具有动态边界的二维阵列。如果您想避免在堆栈上分配这样的猛兽(您应该这样做),您可以一次就可以轻松地分配它们,如下所示

double (*A)[n] = malloc(sizeof(double[n][n]));

仅此而已。然后,您可以很容易地使用它,就像用于2D数组一样A[i][j]..别忘了最后那个

free(A);

兰迪·迈尔斯写了一系列文章解释变长阵列(VLAS).


查看完整回答
反对 回复 2019-06-28
  • 3 回答
  • 0 关注
  • 589 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信