动态分配二维数组
众所周知,每一个二维数组有n行个二级指针指向数组的每一行,每一行有m个一级指针指向数组的每一个元素。因此,我们动态分配二维数组只要分配n个二级指针,n*m个一级指针就行了,先来看一个常用的方法:
int i,**p=(int**)malloc(row*sizeof(int)); for(i=0;i<row;i++) p[i]=(int*)malloc(column*sizeof(int));
但这个方法每次分配指针时都要调用(void)malloc(int)函数,在分配上浪费了时间,因此可以做如下简化:
int i,**p=(int**)malloc(row*sizeof(int)); p[0]=(int*)malloc(row*column*sizeof(int)); for(i=1;i<row;i++) p[i]=p[0]+i*column;
但要注意,这两个方法在内存上的存储是有差别的。第一个每行里的每个元素在内存上是连续的,但每行之间并不一定连续,而第二种每行都是连续的。