这里先给出一个二维数组的动态分配,然后再给出我认为的更好的一种分配方式。
一般的动态的二维分配都是先给出二级指针的初始化,然后就是用多个循环给出一级指针的内存分配,如下:
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,省去了多余的函数的调用。
暂时就说这么些吧。多多交流,欢迎拍砖!
本文介绍了两种二维数组的动态分配方法。第一种是常见的逐层分配内存的方法;第二种则是通过一次分配全部所需内存并进行指针调整的方式,这种方法减少了函数调用次数。
3777

被折叠的 条评论
为什么被折叠?



