输入m行n列的二维数组的值,再按行列形式输出.

我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?... 我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊? 展开
 我来答
ok洛阳水席
推荐于2017-11-25 · TA获得超过1839个赞
知道小有建树答主
回答量:580
采纳率:50%
帮助的人:526万
展开全部

你设置的是静态数组,静态数组的创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!就是说a[m][n],m,n不能是变量,你平常可能看到过a[m][n]定义数组的,但仔细观察就会发现这个时候都能在上面找到#define m XXX与#define m  XXX,这个时候m和n都是固定大小,系统才知道如何分配空间!


LZ的题目,有两种方式解决,

方法一就是定义足够大的数组,再利用两个int型来限制可以使用多少元素,例如设置a[100][100]

而使用的时候保证小标不超过a[5][5],又或者不超过a[10][20],这样就能实现LZ的需要了;


方法二就是使用动态数组,但动态数组就要注意了,对于动态数组,其创建麻烦,使用完必须由程序员自己释放,否则严重会引起内存泄露。不过动态数组使用非常灵活,能根据程序需要动态分配大小。

动态数组的建立依赖于malloc函数

要包含头文件 #include<malloc.h>
例如:只要int *p,使用时p = (int *)malloc(n*sizeof(int));这就相当于 int p[n];注意了,这里的n就可以使变量了!因为它是可变的,所以称为动态数组!

LZ要使用动态二维数组,可仿照下例:

#include <stdlib.h>
#include <stdio.h>
int main()
{
int n1,n2;
int **array,i,j;
puts("输入一维长度:");
scanf("%d",&n1);
puts("输入二维长度:");
scanf("%d",&n2);
array=(int**)malloc(n1*sizeof(int*)); //第一维
for(i=0;i<n1; i++)
{
array[i]=(int*)malloc(n2* sizeof(int));//第二维
for(j=0;j<n2;j++)
{
array[i][j]=i+j+1;
printf("%d\t",array[i][j]);
}
puts("");
}
for(i=0;i<n1;i++)
{
free(array[i]);//释放第二维指针
}
free(array);//释放第一维指针
return 0;
}

纯手打,希望对你有用,亲!

悠游万年
2013-05-13
知道答主
回答量:13
采纳率:0%
帮助的人:4.1万
展开全部
数组不允许动态定义,m与n必须为常量,int [3][4]
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式