猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
如何在C中处理动态多维数组?
如何在C中处理动态多维数组?
有人知道我如何使用C来动态分配多维数组吗?这有可能吗?
红颜莎娜
浏览 590
回答 3
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);
0
0
0
慕神8447489
自C99以来,C具有动态边界的二维阵列。如果您想避免在堆栈上分配这样的猛兽(您应该这样做),您可以一次就可以轻松地分配它们,如下所示double (*A)[n] = malloc(sizeof(double[n][n]));仅此而已。然后,您可以很容易地使用它,就像用于2D数组一样A[i][j]..别忘了最后那个free(A);兰迪·迈尔斯写了一系列文章解释变长阵列(VLAS).
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C
typedef入门问题
1 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续