两处错误:
1. 返回函数内的局部变量。函数内局部变量在函数返回后就不再有效了。换成static.
2.输出的应该是p[0],p[1],p[2].
给你改过了。
结果测试:
输入二维数组的行数和列数
2 3
输入二维数组如下
1 2 3
4 8 0
最大值为8,其对应的行下标为1,其对应的列下标为1
改过的代码:
#include
#define M 5
#define N 5
void main()
{
int i,j,m,n;
int a[M][N],*p,*array(int(*p)[N],int m,int n);
printf("输入二维数组的行数和列数\n");
scanf("%d%d",&m,&n);
printf("输入二维数组如下\n");
for(i=0;i
p=array(a,m,n);
printf("最大值为%d,其对应的行下标为%d,其对应的列下标为%d", p[0], p[1], p[2]);
}
int *array(int (*p)[N],int m,int n)
{
int i,j;
static int t[3];
t[0]=p[0][0];
t[1]=0;
t[2]=0;
for(i=0;i
{
t[0]=p[i][j];
t[1]=i;
t[2]=j;
}
return t;
}
/*
我写了一个,你随便参考参考吧 呵呵
注意一下:
数组中如果有多个最大值,
输出的是第一个最大值的行标和列标
*/
# include
# define M 5
# define N 5
//初始化数组,为数组赋值
void init_Array(int (* arrayName)[5], int rows, int cols);
//处理二维数组
void do_Array(int (* a)[5], int (* result)[5], int rows, int cols);
//输出数组中最大的元素的值以及其下标
void getMaxAndRowCol(int (* a)[5], int (* result)[5], int rows, int cols);
int num;
int main(void)
{
int i,j,m,n;
int a[M][N];
printf("输入二维数组的行数和列数\n");
scanf("%d%d",&m,&n);
init_Array(a, m, n);
int result[5][5];
do_Array(a,result, 5, 5);
getMaxAndRowCol(a,result, 5, 5);
return 0;
}
void init_Array(int (* arrayName)[5], int rows, int cols)
{
printf("输入二维数组如下\n");
int i,j;
for (i=0; i
for (j=0;j
scanf("%d",&arrayName[i][j]);
}
}
}
void do_Array(int (* a)[5], int (* result)[5], int rows, int cols)
{
int i,j;
num = a[0][0];
for (i=0; i
for (j=0; j
if (num <= a[i][j])
{
result[i][j] = a[i][j];
num = a[i][j];
}
}
}
}
void getMaxAndRowCol(int (* a)[5], int (* result)[5], int rows, int cols)
{
int i,j;
for (i=0; i
for (j=0;j
if (result[i][j] >= num)
{
printf("\n最大元素%3d\t行标:%3d\t列标:%3d\n",a[i][j],i,j);
return ;
//找到最大的值,
//并且行号列号最小,
//然后结束函数
}
}
}
}
/*
运行结果:
--------
输入二维数组的行数和列数
3 3
输入二维数组如下
10 20 30
30 50 30
20 18 50
最大元素 50 行标: 1 列标: 1
---------
*/
#include
#define M 5
#define N 5
void main()
{
int i,j,m,n;
int a[M][N],*p,*array(int(*p)[M],int m,int n);
printf("输入二维数组的行数和列数\n");
scanf("%d%d",&m,&n);
printf("输入二维数组如下\n");
for(i=0;i
p=array(a,m,n);
printf("最大值为%d,其对应的行下标为%d,其对应的列下标为%d",p[0],p[1],p[2]);
}
int *array(int (*p)[M],int m,int n)
{
int i,j;
int t[3];
t[0]=p[0][0];
t[1]=0;
t[2]=0;
for(i=0;i
{
t[0]=p[i][j];
t[1]=i;
t[2]=j;
}
return t;
}
1 p=array(a,m,n); p是野指针
2 printf("最大值为%d,其对应的行下标为%d,其对应的列下标为%d",a,m,n); 输出不对
3 return t; 返回局部变量的地址