用malloc动态申请一个二维数组的三种方法

用malloc动态申请一个二维数组的三种方法

方法一:利用二级指针申请一个二维数组。

#include

#include

int main()

{

int **a; //用二级指针动态申请二维数组

int i,j;

int m,n;

printf("请输入行数\n");

scanf("%d",&m);

printf("请输入列数\n");

scanf("%d",&n);

a=(int**)malloc(sizeof(int*)*m);

for(i=0;i

a[i]=(int*)malloc(sizeof(int)*n);

for(i=0;i

{

for(j=0;j

{

printf("%p\n",&a[i][j]); //输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续

}

}

for(i=0;i

free(a[i]);

free(a);

return 0;

}

方法二:用数组指针形式申请一个二维数组。

#include

#include

int main()

{

int i,j;

//申请一个3行2列的整型数组

int (*a)[2]=(int(*)[2])malloc(sizeof(int)*3*2);

for(i=0;i<3;i++)

{

for(j=0;j<2;j++)

{

printf("%p\n",&a[i][j]); //输出数组每个元素地址,每个元素的地址是连续的

}

}

free(a);

return 0;

}

方法三:用一个单独的一维数组来模拟二维数组。

#include

#include

int main()

{

int nrows,ncolumns;

int *Array;

int i,j;

printf("please input nrows&ncolumns:\n");

scanf("%d%d",&nrows,&ncolumns);

Array=(int *)malloc(nrows*ncolumns*sizeof(int)); //申请内存空间

for(i=0;i

{

for(j=0;j

{

Array[i*ncolumns+j]=1;

printf("%d ",Array[i*ncolumns+j]); //用Array[i*ncolumns+j] 访问第i,j个成员

}

printf("\n");

}

free(Array);

return 0;

}

相关文章

实习生培养计划怎么做?有效步骤有哪些?
bt365软件下载

实习生培养计划怎么做?有效步骤有哪些?

09-18 阅读: 1158
ICO服务平台ICOAGE暂停服务
bt365软件下载

ICO服务平台ICOAGE暂停服务

09-26 阅读: 3488
为什么大部分​都说程序员不用鼠标呢?
bt365软件下载

为什么大部分​都说程序员不用鼠标呢?

10-20 阅读: 9340
电脑显存不足怎么办?|显存不足的解决方法(图文)
魔兽世界转服能带多少金币?超详细规则与实战技巧
世界杯足球宝贝---睿祺
bt365软件下载

世界杯足球宝贝---睿祺

10-12 阅读: 9532