C语言中怎样定义一个未知行数和列数的二维数组? 20

......intn,m,i,j,k,s=0;printf("请输入矩阵的行数n和列数m(2<=n<=100,2<=m<=100),以空格分开\n");scanf("%d... ......
int n,m,i,j,k,s=0;
printf("请输入矩阵的行数n和列数m(2<=n<=100, 2<=m<=100) ,以空格分开 \n");
scanf("%d%d",&n,&m);
int a[n][m];
printf("\n请按矩阵格式输入矩阵的各个数据\n");
for(j=0;j<m;j++)
......
这里的数组定义有错,编译提示unknown size
我知道这样不行,但是矩阵的行数和列数都要用户确定,那我该怎么办才能实现?
展开
 我来答
tattackor
推荐于2017-09-25 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:873万
展开全部

1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配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 3
1 2 3 4
2 3 4 5
*/
蒿飇睢菡
2020-03-17 · TA获得超过3658个赞
知道大有可为答主
回答量:3075
采纳率:26%
帮助的人:175万
展开全部
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配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 3
1 2 3 4
2 3 4 5
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
胥胜洛隽美
2019-07-20 · TA获得超过3884个赞
知道大有可为答主
回答量:3034
采纳率:25%
帮助的人:208万
展开全部
1、使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小。
2、例程,分配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 3
1 2 3 4
2 3 4 5
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
狼顾之
2015-09-19 · 超过12用户采纳过TA的回答
知道答主
回答量:23
采纳率:0%
帮助的人:22.2万
展开全部
C语言是不能定义这样的数组的。一定需要的话可以使用表,在新增项的时候分配存储空间
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
silenceandluo
2015-09-09 · TA获得超过1046个赞
知道小有建树答主
回答量:713
采纳率:0%
帮助的人:267万
展开全部
c语言的数组定义时,必须确定行数和列数,因为在c语言中数组不允许动态定义。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式