typedef struct
{
double *datap;
int lie;//列
int hang;//
}Dmatrix_t;
int DMatrix_mul(Dmatrix_t *X,Dmatrix_t *Y,Dmatrix_t *Z)// z=A*B
{
int i=0,j=0,k=0;
double *Z_p,*X_p,*Y_p;
if(X->lie != Y->hang) return 0;
if(Z->hang != X->hang) return 0;
if(Z->lie != Y->lie) return 0;
for(i=0;i<X->hang;i++)
{
Z_p = Z->datap + i * Y->lie ;
for(j=0;j<Y->lie;j++)
{
X_p = X->datap + i * X->lie; //放在 J前面 ,循环一次k后,指针继续涨出错
Y_p = Y->datap + j;
*Z_p=0;
for(k=0;k < X->lie; k++)
{
*Z_p += *X_p * *Y_p;
X_p ++;
Y_p += Y->lie;
//Z->datap[ij] += X->datap[i*X->lie+k] * Y->datap[k*Y->lie+j ];
}
Z_p ++;
}
}
return 1;
}
void main(void)
{
double mat_data_A[3][3]={0};
double mat_data_B[3][3]={0};
double mat_data_C[3][3];
Dmatrix_t mat_A,mat_B,mat_C;
mat_A.datap=( double *)mat_data_A; mat_A.lie=3; mat_A.hang=3;
mat_B.datap=( double *)mat_data_B; mat_B.lie=3; mat_B.hang=3;
mat_B.datap=( double *)mat_data_C; mat_C.lie=3; mat_C.hang=3;
DMatrix_mul(&mat_A,&mat_B,&mat_C); // mat_C=mat_A . mat_B
}