C语言中如何定义动态二维数组并输出

我需要定义一个a[ ][ ]的数组,两列,但是不知道是几行,要根据实际输入来定。如何用#include<malloc.h>来定义?大神最好能帮我直接写出来,包括输入行数、数据,输出整体矩阵。跪谢!
好久不用知道,已经没分了T T C大神就当救济穷人咯!~先谢过!
数组类型是double

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<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);


return0;

}

扩展资料

c语言中通过函数传递二维数组

#include

void func(int n, int a[][size])

{

/* access array */

a[i][j];

}

void main()

{

int a[10][10];

func(10, a);

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-01

实现先输入二维数组的行数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 释放二维指针上的内存。

本回答被网友采纳
第2个回答  推荐于2017-09-11

可以按照下面步骤进行定义二维数组并输出:

1 定义二维指针。

2 确定数组维数,即行数和列数。

3 申请行数个一维指针大小空间,并赋值给二维指针。

4 对于每个一维指,申请列数个元素的空间,并赋值给对应的一维指针。

5 输入或赋值数据。

6 使用双重循环,逐个范围存储单元并输出。

7 逐个释放一维指针上的内存。

8 释放二维指针上的内存。


以整型二维数组为例:

下面的代码,实现先输入二维数组的行数m和列数n,并再输入m*n个整型数据存到动态二维数组中。最后输出所有二维数组的元素值。

#include <stdio.h> //包含输入输出函数
#include <stdlib.h>//包含动态内存分配函数。

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;
}

第3个回答  2019-08-21
使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
示例代码,分配3行4列二维数组:
#include
<stdio.h>#include
<malloc.h>
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*/
第4个回答  推荐于2017-09-29
多维数组一维化...

#include <stdio.h>
#include <malloc.h>
int main()
{
double *p;
int row,col=2,i,j;
scanf("%d",&row);
p=(double *)malloc(col*row);
for(i=0;i<row;++i)
{
for(j=0;j<2;++j)
{
p[i*col+j]=i*col+j;
}
}
for(i=0;i<row;++i)
{
for(j=0;j<2;++j)
{
printf("%lf\t",p[i*col+j]);
}
printf("\n");
}
}本回答被提问者和网友采纳
相似回答