intmain()
{
int**p;//定义二维指针。
intm,n;//行数和列数。
inti,j;
scanf("%d%d",&m,&n);//输入行数和列数。
if(m<=0||n<=0)return-1;//行数或列数非法。
p=(int**)malloc(sizeof(int*)*m);//申请一组一维指针空间。
for(i=0;i p[i]=(int*)malloc(sizeof(int)*n);//对于每个一维指针,申请一行数据的空间。 for(i=0;i for(j=0;j scanf("%d",&p[i][j]);//输入第i行第j列的数据。其中&p[i][j]也可以写作p[i]+j或者是*(p+i)+j.功能相同。 printf("输入的数组为%d行%d列:\n",m,n); for(i=0;i { for(j=0;j printf("%d",p[i][j]);//输出i行j列的元素。 printf("\n");//每行输入结束加换行符。 } //释放内存 for(i=0;i free(p[i]); free(p); return0; } 扩展资料 c语言中通过函数传递二维数组 #include void func(int n, int a[][size]) { /* access array */ a[i][j]; } void main() { int a[10][10]; func(10, a); }
实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。代码如下:
int main()
{
int **p; //定义二维指针。
int m, n;//行数和列数。
int i,j;
scanf("%d%d", &m, &n); //输入行数和列数。
if(m <= 0 || n <= 0) return -1; //行数或列数非法。
p = (int **) malloc(sizeof(int *) *m);//申请一组一维指针空间。
for(i = 0; i < m; i ++)
p[i] = (int *)malloc(sizeof(int) * n); //对于每个一维指针,申请一行数据的空间。
for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
scanf("%d",&p[i][j]);
printf("输入的数组为%d行%d列:\n", m, n);
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)//这个循环可以输出一行元素。
printf("%d ", p[i][j]);//输出i行j列的元素。
printf("\n");//每行输入结束加换行符。
}
//释放内存
for(i = 0; i < m; i ++)
free(p[i]);
free(p);
return 0;
}
扩展资料:
定义二维数组并输出:
1、定义二维指针。
2、确定数组维数,即行数和列数。
3、申请行数个一维指针大小空间,并赋值给二维指针。
4、对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。
5、输入或赋值数据。
6、使用双重循环,逐个范围存储单元并输出。
7、逐个释放一维指针上的内存。
8 释放二维指针上的内存。
可以按照下面步骤进行定义二维数组并输出:
1 定义二维指针。
2 确定数组维数,即行数和列数。
3 申请行数个一维指针大小空间,并赋值给二维指针。
4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。
5 输入或赋值数据。
6 使用双重循环,逐个范围存储单元并输出。
7 逐个释放一维指针上的内存。
8 释放二维指针上的内存。
以整型二维数组为例:
下面的代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。
#include//包含输入输出函数
#include//包含动态内存分配函数。
int main()
{
int **p; //定义二维指针。
int m, n;//行数和列数。
int i,j;
scanf("%d%d", &m, &n); //输入行数和列数。
if(m <= 0 || n <= 0) return -1; //行数或列数非法。
p = (int **) malloc(sizeof(int *) *m);//申请一组一维指针空间。
for(i = 0; i < m; i ++)
p[i] = (int *)malloc(sizeof(int) * n); //对于每个一维指针,申请一行数据的空间。
for(i = 0; i < m; i ++)
for(j = 0; j < n; j ++)
scanf("%d",&p[i][j]);//输入第i行第j列的数据。其中&p[i][j]也可以写作p[i]+j或者是 *(p+i) + j. 功能相同。
printf("输入的数组为%d行%d列:\n", m, n);
for(i = 0; i < m; i ++)
{
for(j = 0; j < n; j ++)//这个循环可以输出一行元素。
printf("%d ", p[i][j]);//输出i行j列的元素。
printf("\n");//每行输入结束加换行符。
}
//释放内存
for(i = 0; i < m; i ++)
free(p[i]);
free(p);
return 0;
}
使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
示例代码,分配3行4列二维数组:
#include
int
main(){
int
**a;
int
i,
j;
a
=
(int**)malloc(sizeof(int*)*3);//为二维数组分配3行
for
(i
=
0;
i
<
3;
++i){//为每列分配4个大小空间
a[i]
=
(int*)malloc(sizeof(int)*4);
}
//初始化
for
(i
=
0;
i
<
3;
++i){
for
(j
=
0;
j
<
4;
++j){
a[i][j]
=
i+j;
}
}
//输出测试
for
(i
=
0;
i
<
3;
++i){
for
(j
=
0;
j
<
4;
++j){
printf
("%d
",
a[i][j]);
}
printf
("\n");
}
//释放动态开辟的空间
for
(i
=
0;
i
<
3;
++i){
free(a[i]);
}
free(a);
return
0;}/*输出:0
1
2
31
2
3
42
3
4
5*/
多维数组一维化...
#include
#include
int main()
{
double *p;
int row,col=2,i,j;
scanf("%d",&row);
p=(double *)malloc(col*row);
for(i=0;i
for(j=0;j<2;++j)
{
p[i*col+j]=i*col+j;
}
}
for(i=0;i
for(j=0;j<2;++j)
{
printf("%lf\t",p[i*col+j]);
}
printf("\n");
}
}