用malloc动态申请一个二维数组的三种方法
方法一:利用二级指针申请一个二维数组。
#include<stdio.h> #include<stdlib.h> int main() { int **a; //用二级指针动态申请二维数组 int i,j; int m,n; printf("请输入行数 "); scanf("%d",&m); printf("请输入列数 "); scanf("%d",&n); a=(int**)malloc(sizeof(int*)*m); for(i=0;i<m;i++) a[i]=(int*)malloc(sizeof(int)*n); for(i=0;i<m;i++) { for(j=0;j<n;j++) { printf("%p ",&a[i][j]); //输出每个元素地址,每行的列与列之间的地址时连续的,行与行之间的地址不连续 } } for(i=0;i<m;i++) free(a[i]); free(a); return 0; }
方法二:用数组指针形式申请一个二维数组。
#include<stdio.h> #include<stdlib.h> 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 ",&a[i][j]); //输出数组每个元素地址,每个元素的地址是连续的 } } free(a); return 0; }
方法三:用一个单独的一维数组来模拟二维数组。
#include <stdio.h> #include <stdlib.h> int main() { int nrows,ncolumns; int *Array; int i,j; printf("please input nrows&ncolumns: "); scanf("%d%d",&nrows,&ncolumns); Array=(int *)malloc(nrows*ncolumns*sizeof(int)); //申请内存空间 for(i=0;i<nrows;i++) { for(j=0;j<ncolumns;j++) { Array[i*ncolumns+j]=1; printf("%d ",Array[i*ncolumns+j]); //用Array[i*ncolumns+j] 访问第i,j个成员 } printf(" "); } free(Array); return 0; }
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
copyright © 2008-2019 入门客AI创业平台 版权所有 备案号:湘ICP备2023012770号