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

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

有人知道我如何使用C来动态分配多维数组吗?这有可能吗?



红颜莎娜
浏览 590回答 3
3回答

狐的传说

使用动态分配,使用malloc:int**&nbsp;x;x&nbsp;=&nbsp;malloc(dimension1_max&nbsp;*&nbsp;sizeof(int*));for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;dimension1_max;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;x[i]&nbsp;=&nbsp;malloc(dimension2_max&nbsp;*&nbsp;sizeof(int));}[...]for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;dimension1_max;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;free(x[i]);}free(x);这将分配一个大小为2D的数组。dimension1_max&nbsp;*&nbsp;dimension2_max..例如,如果您想要一个640*480数组(F.E。),使用dimension1_max&nbsp;= 640,&nbsp;dimension2_max=480。然后,可以使用x[d1][d2]哪里d1&nbsp;= 0..639,&nbsp;d2&nbsp;= 0..479.但是搜索so或google也会发现其他可能性,例如在这个问题上请注意,在这种情况下,您的数组不会分配一个连续的内存区域(640*480字节),这可能会给假设这种情况的函数带来问题。因此,要使数组满足条件,请将上面的malloc块替换为:int**&nbsp;x;int*&nbsp;temp;x&nbsp;=&nbsp;malloc(dimension1_max&nbsp;*&nbsp;sizeof(int*));temp&nbsp;=&nbsp;malloc(dimension1_max&nbsp;*&nbsp;dimension2_max&nbsp;*&nbsp;sizeof(int));for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;dimension1_max;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;x[i]&nbsp;=&nbsp;temp&nbsp;+&nbsp;(i&nbsp;*&nbsp;dimension2_max);}[...]free(temp);free(x);

慕神8447489

自C99以来,C具有动态边界的二维阵列。如果您想避免在堆栈上分配这样的猛兽(您应该这样做),您可以一次就可以轻松地分配它们,如下所示double&nbsp;(*A)[n]&nbsp;=&nbsp;malloc(sizeof(double[n][n]));仅此而已。然后,您可以很容易地使用它,就像用于2D数组一样A[i][j]..别忘了最后那个free(A);兰迪·迈尔斯写了一系列文章解释变长阵列(VLAS).
打开App,查看更多内容
随时随地看视频慕课网APP