也谈谈二维数组的动态分配

 

这里先给出一个二维数组的动态分配,然后再给出我认为的更好的一种分配方式。

 

一般的动态的二维分配都是先给出二级指针的初始化,然后就是用多个循环给出一级指针的内存分配,如下:

 

 int **array1 = (int **)malloc(nrows * sizeof(int *)); for(i = 0; i < nrows; i++) array1[i] = (int *)malloc(ncolumns * sizeof(int));

 

我想这个是最常规的做法了,先给array分配一int**, 再给每个int*来一个malloc,没有问题,再来看另外一种实现方法,如下:

 

int **array2 = (int **)malloc(nrows * sizeof(int *)); array2[0] = (int *)malloc(nrows * ncolumns * sizeof(int)); for(i = 1; i < nrows; i++) array2[i] = array2[0] + i * ncolumns;   

 

这样也能实现,效果我觉得更好吧,两个malloc,省去了多余的函数的调用。

 

暂时就说这么些吧。多多交流,欢迎拍砖!

你可能感兴趣的:(也谈谈二维数组的动态分配)