首先先说一下二维数组的传参,有三种模式
1.形参为二级指针
函数定义:
void function(int **arry, int col);// col为列宽度
函数调用:
function((int **)arry);
在函数中使用:
*(int *)arry+rows*col+cols ;
2.形参为数组指针
函数定义:
void function(int (*arry)[], int col);// col为列宽度
函数调用:
function(arry); //直接输入数组名就可以了
在函数中使用:
*(int *)arry+rows*col+cols;
*(a[rows]+cols);
*(*(a+rows)+rols);
2.形参为二维数组
函数定义:
void function(int arry[][n]);// col为列宽度
函数调用:
function(arry); //直接输入数组名就可以了
在函数中使用:
*(int *)arry+rows*col+cols;
*(a[rows]+cols);
*(*(a+rows)+rols);
下面实现找出3x3矩阵里行最大同时列最小的数所在的行和列
// arry 矩阵 row: 行 col: 列 Rrow: 返回行 Rcol: 返回列
void FoundMaxRowMinCol(int **arry,int row,int col,int *Rrow,int *Rcol)
{
//先判断数组是否为空
if(arry==NULL)
{
return False;
}
int i=0,j=0;
int Number=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(*((int *)arry+i*col+j)>Number) //先找出行最大
{
Number=*((int *)arry+i*col+j;
*Rrow=i;
*Rcol=j;
}
}
//再判断是不是列最小
for(int k=0;k<row;k++)
{
if(*((int *)arry+k*col+*Rcol)<Number)
break; //跳出循环
if(k=row-1)
printf("%d, %d\n", *row, *col);
}
}
}