用指针求二维数组中最大值最小值及其所在行列下标

输入一个3*6的二维数组,输出其中最大值,最小值,及其所在行列下标.要求用指针实现.数组是二维数组,不要用一维数组的形式做.
用C语言做.程序运行是正确的.请问用一级指针能做吗?指针学的很迷糊

第1个回答  推荐于2016-05-17
#include <stdio.h>
#include <stdlib.h>

void main()
{
int i,j;
int NC=6, NR=3;
int **a;
int a_max,a_min,i_max,i_min,j_max,j_min;

a = (int **) malloc(sizeof(int *) * NR);
for (j=0;j<NR;j++){
a[j] = (int *) malloc(sizeof(int) * NC);
}

// 请用 scanf 输入数据,我这里简单赋值了
for (j=0;j<NR;j++) for (i=0;i<NC;i++) {
a[j][i] = (j+1)*100 + i;
}

for (j=0;j<NR;j++){
for (i=0;i<NC;i++) printf("%3d ",**(a+j)+i);
printf("\n");
}

a_max= **a;
a_min= **a;
i_max=i_min=j_max=j_min=0;
for (j=0;j<NR;j++)
for (i=0;i<NC;i++)
{
if (**(a+j)+i > a_max) { i_max = i; j_max=j,a_max = **(a+j)+i; };
if (**(a+j)+i< a_min) { i_min = i; j_min=j,a_min = **(a+j)+i; };
}

printf("Max: j=%d i=%d a=%d\n",j_max,i_max, **(a+j_max)+i_max );
printf("Min: j=%d i=%d a=%d\n",j_min,i_min, **(a+j_min)+i_min );

}

语句里 可以用 a[j][i] 代替 **(a+j)+i 的!本回答被提问者采纳
第2个回答  2008-04-09
问楼上的:
a[j][i]不是等价于*(*(a+j)+i)么??
相似回答