请高手帮忙把这个函数解释一下,我还有更复杂的问题要请教啊
            CalcuteMatrix
void CMarkElement::CalcuteMatrix(float** arr,int nRow,int nColum)
{
int r;
for(r=0;r<nRow;r++)
{
int pos=0;
float fMax;
fMax=(float)fabs(*(*arr+r));
for(int i=r+1;i < nRow;i++)
{
float tmp;
tmp=(float)fabs(*(*(arr+i)+r));
if(tmp > fMax) {fMax = tmp;pos=i;}
}
for(int j=r;pos != 0 && j < nColum;j++)
{
float tmp;
tmp = *(*(arr+pos)+j);
*(*(arr+pos)+j) = *(*(arr+r)+j);
*(*(arr+r)+j) = tmp;
} for(int k=r+1;k < nColum;k++)
{
*(*(arr+r)+k) /= (*(*(arr+r)+r));
for(i=r+1;i<nRow;i++)
{
float tmp = *(*(arr+i)+r) * (*(*(arr+r)+k));
*(*(arr+i)+k) -= tmp;
}
        }
}
for(r=1;r < nRow;r++)
{
int i=nRow-r-1;
for(int j=i+1;j<nRow;j++)
{
float sun = *(*(arr+i)+j) * *(*(arr+j)+nRow);
*(*(arr+i)+nRow) -= sun;
}
}
}