行列最大值,方法很多,一般循环遍历属于就可以了。
既然你要用指针来做,我就用指针来写。利用数组元素地址连贯性来做。
#include <stdio.h>
#define MXR 4//最大行数
#define MXC 3//最大列数
int main()
{
int i=0,mr,mc,*p=NULL,*ps=NULL;
int nums[MXR][MXC]={{8,6,7},{2,6,3},{1,4,2},{9,3,5}};
int mrs[MXR],mcs[MXC];
printf("原二维数组:\n8 6 7\n2 6 3\n1 4 2\n9 3 5\n");
//-----------------------获取每行最大值------------------------------------------------
p=&nums[0][0],mr=*p;
for(;p<=&nums[MXR-1][MXC-1];p++)
{
if(p>&nums[0][0]&&(p-&nums[0][0])%MXC==0)//如果指针换行,保存上一行最大值
{
mrs[i++]=mr;
mr=*p;
}
if(mr<*p)
mr=*p;
}
mrs[i]=mr;
//-----------------------获取每列最大值-----------------------------------------------------
i=0,ps=&nums[0][0];
while(ps<=&nums[0][MXC-1])
{
p=ps,mc=*p;
while(p<=&nums[MXR-1][MXC-1])
{
if(mc<*p)
mc=*p;
p+=MXC;
}
mcs[i++]=mc;
ps++;
}
//---------------输出结果-----------------------------------------------------------------
printf("每行最大值分别为: \n");
for(i=0;i<MXR;i++)
printf("%d ",mrs[i]);
printf("\n每列最大值分别为: \n");
for(i=0;i<MXC;i++)
printf("%d ",mcs[i]);
return 0;
}