您的位置:首页 > 其它

动态申请二维数组

2017-01-08 19:44 211 查看
方法一:利用二级指针申请一个二维数组。

[objc] view
plain copy

print?

#include<stdio.h>

#include<stdlib.h>

int main()

{

intint **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<m;i++)

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

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

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

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

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

free(a[i]);

free(a);

return 0;

}

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

[objc] view
plain copy

print?

#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\n",&a[i][j]);

} //输出数组每个元素地址,每个元素的地址是连续的

free(a);

return 0;

}

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

[objc] view
plain copy

print?

#include <stdio.h>

#include <stdlib.h>

void main()

{

int nrows,ncolumns;

intint *Array;

int i,j;

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

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

Array=(intint *)malloc(nrows*ncolumns*sizeof(intint *));

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

{

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

{

Array[i*nrows+j]=1;

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

}

printf("\n");

}

free(Array);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: