刷OJ的时候惊喜的发现,我竟然不会给二维数组动态分配内存。写了n年的代码了,竟然被这个难倒了!自惭形秽,难以言表。

方法一

先分配指针数组的内存,然后给数组中的每个int *指针分配内存:

int **data, i;
data = (int *)malloc(sizeof(int *) * row);

for (i = 0; i < row; i++) {
    data[i] = (int *)malloc(sizeof(int) * col);
}

数组的表现形式:

方法二

使用一维指针模拟成二维指针,分配row * col个连续的元素,访问的时候模拟成二维指针访问:

data = (int *)malloc(sizeof(int) * row * col);

for (i = 0; i < row; i++) {
    for (j = 0; j < col; j++) {
        *(data + i * col + j) = i * j;
    }
}

参考

How to dynamically allocate a 2D array in C?

最后修改:2020 年 04 月 05 日
如果觉得我的文章对你有用,请随意赞赏