如何在C中动态分配2D数组?

可以使用单个指针在C中动态分配2D数组。这意味着使用malloc分配了大小为row * column * dataTypeSize的存储块,并且可以使用指针算法来访问矩阵元素。

演示该程序的程序如下。

示例

#include <stdio.h>
#include <stdlib.h> 
int main() {
   int row = 2, col = 3;
   int *arr = (int *)malloc(row * col * sizeof(int)); 
   int i, j;
   for (i = 0; i < row; i++)
      for (j = 0; j < col; j++)
         *(arr + i*col + j) = i + j;    
   printf("The matrix elements are:\n");
   for (i = 0; i < row; i++) {
      for (j = 0; j < col; j++) {
         printf("%d ", *(arr + i*col + j)); 
      }
      printf("\n");
   }
   free(arr); 
   return 0;
}

上面程序的输出如下。

The matrix elements are:
0 1 2 
1 2 3

现在让我们了解上面的程序。

二维数组arr使用malloc动态分配。然后,使用嵌套的for循环和指针算法初始化二维数组。显示此代码段如下。

int row = 2, col = 3; 
int *arr = (int *)malloc(row * col * sizeof(int));
int i, j;
for (i = 0; i < row; i++)
   for (j = 0; j < col; j++)
      *(arr + i*col + j) = i + j;

然后显示二维数组的值。最后,使用free释放动态分配的内存。显示此代码段如下。

printf("The matrix elements are:\n");
for (i = 0; i < row; i++) {
   for (j = 0; j < col; j++) {
      printf("%d ", *(arr + i*col + j)); 
   }
   printf("\n");
}
free(arr);