输入m行n列的二维数组的值,再按行列形式输出.我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/01 18:47:16
输入m行n列的二维数组的值,再按行列形式输出.我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?

输入m行n列的二维数组的值,再按行列形式输出.我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?
输入m行n列的二维数组的值,再按行列形式输出.
我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?

输入m行n列的二维数组的值,再按行列形式输出.我从键盘上输入的这个数列的行m和列n,可是不能用a[m][n]来定义二维数组,那应该怎么定义啊?

你设置的是静态数组,静态数组的创建非常方便,使用完也无需释放,要引用也简单,但是创建后无法改变其大小是其致命弱点!就是说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;
}

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