动态申请二维数组
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);
}
[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);
}
相关文章推荐
- Vector 二维数组动态申请和访问
- c++二维数组的动态申请
- 参数传递二维数组及动态申请二维数组
- 动态申请二维数组的方式和遍历二维数组的两种方式
- 动态申请二维数组
- 动态申请二维数组
- 动态申请二维数组并释放
- c中使用malloc动态申请二维数组
- 数据结构动态申请二维数组
- 一步一步学数据结构之(动态申请二维数组)
- 如何用new动态申请二维数组,然后又如何用delete释放
- C++ 动态申请列数行数不确定的变长二维数组(主要是行数不确定)
- C++动态申请二维数组
- 动态申请 二维数组 以及初始化、 赋值
- C++矩阵类中的运算符重载和二维数组动态申请内存
- C++动态申请二维数组
- 二维数组动态申请空间以及二维数组函数传参问题
- C语言动态申请二维数组
- C语言动态申请二维数组
- 用内存申请实现动态二维数组的创建及打印(每行的元素个数不同)