C语言定义数组行列数的问题

数组定义行列数时是不能用变量的。可是现在我想设计这样一个程序:可以随意的输入内容形成一个不确定行列数的字符数组,以一个类似表格的形式输出。
这个程序必须具有以下功能:程序开始的时候要先输入第一行每个“单元格”内的内容,当然,这些单元格的内容是不确定的,你可以随时终止;第一列也是这样;这样行列数就确定了,然后你需要逐行输入每个“单元格”的内容来完成这个表格。
我不会的地方就是定义数组时不能用变量的问题,给出事例形式的解决方案即可。当然,若你给出了完整的C程序,可以加分,根据程序的完整性、正确性,我可以多给20-50分。

同学你好,我也遇到过这样的问题,数组定义时,行列数不能用变量。 但是, 我们可以动态创建一个二维数组

你可以这样做:(以int型为例)

int **a;
int m,n,i;
scanf("%d%d",&m,&n); //输入你此次想要创建数组的行数和列数,储存在m和n中

a=(int**)malloc(m*sizeof(int*)); /*malloc函数在stdlib.h里面,用的时候加入这个头文件*/

for(i=0;i<m;i++)
a[i]=(int*)malloc(n*sizeof(int));

/*这样以后你就可以把a当作二维数组a[m][n]来用了。。

由此可以实现,创建不确定行列数的二维数组了 ( 前提你知道malloc函数的意义,并要掌握指针的基础知识哦 )
采纳我哟~~追问

你应该挺厉害的,奈何我的C语言刚入门,有很多不会的地方,你能帮我详细地解释解释这两句吗:
a=(int**)malloc(m*sizeof(int*));

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

我不懂它们的含义和作用。亲让我茅塞顿开的话,再给你50分呦~

追答

我学C语言也才刚一年而已哦
先看这句:a=(int**)malloc(m*sizeof(int*));
malloc表示开辟内存空间,这个内存空间有多大呢?m*sizeof(int*)就表示了所开辟的内存空间的大小。也就是开辟了m个大小为sizeof(int*)的空间分别用放m行的行地址。然后把这m个空间首地址赋给a。(打个比方,就是建造了m个房子,用来存放m行第一个数的地址)
再看这句:
a[i]=(int*)malloc(n*sizeof(int));
表示开辟大小为n*sizeof(int)的内存空间用于存放每一行的n个数。然后把这n个空间首地址赋给a[i].
(也就是将刚才建造的m个房子拓展成m个楼层,每个楼层有n个房子)

这样一座大楼就建成了,m和n由你任意输入。 m x n 个元素就这样被存放在m个楼层,n个房子里面) 接下来你就可以把a当作二维数组a[m][n]来用了。。

清楚了吗?

追问

你说得很对的样子,可是为什么调试时不对啊,它会显示“Debug Error”,“Invalid allocation size: 4294967295 bytes”。按步调试时会在:a[i]=(int*)malloc(n*sizeof(int)); 这里出现相同错误。
还有,我前面问你的那两句好像有些问题,应该是星号上错了吧,你可以看下吗?麻烦你了

追答

把你的源程序告诉我吧,我帮你修改一下

追问

你有QQ,或是其他的联系方式吗?这里不行的,超出最大字数了

追答

QQ:892888995

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-14
用线性表或者链表比较符合你的要求。最简单的是在C的基础上建立动态数组,就是用malloc。不过这个动态数组的功能还是有限。
加上 #include <malloc.h> 后
主函数内定义动态数组:
先输入你想要定的n的值,然后加上这句
int *A;
A = (int *)malloc(sizeof(int)*n);
第2个回答  2013-10-14
数组做不到,你可以用 relloc来重新分配数组长度,
我建议你用链表来做
第3个回答  2013-10-14
你试试利用主函数将可变动的行列数传递到子函数(子函数为创建表格)
第4个回答  2013-10-14
常见的方法就是用链表,动态申请内存。
相似回答