#include <stdio.h>
#include <stdlib.h>
typedef struct
{
double *datap;
int lie; //列
int hang;//行
}Dmatrix_t;
int Dmatrix_Trans(Dmatrix_t *D_p,Dmatrix_t *S_p)
{
if(D_p->hang != S_p->lie) return 0;
if(D_p->lie != S_p->hang) return 0;
int hang,lie,D_P_lie;
D_P_lie= D_p->lie;
for(hang=0;hang< S_p->hang;hang++)
{
double *S_Lie_p = S_p->datap + hang * S_p->lie;
double *D_hang_p = D_p->datap + hang;
for(lie=0;lie< S_p->lie;lie++)
{
*D_hang_p = *S_Lie_p++;
D_hang_p += D_P_lie;
}
}
return 1;
}
void Dmatrix_print(Dmatrix_t *DM_p,char *max_name)
{
printf("%s[%d][%d]\n",max_name,DM_p->hang,DM_p->lie);
int i,j;
for(i=0;i<DM_p->hang;i++)
{
double *data_p= DM_p->datap+i*DM_p->lie;
for(j=0;j<DM_p->lie;j++)
{
printf("%5.2f ", *data_p++);
}
printf("\n");
}
}
int main()
{
double S_arr[3][4],D_arr[4][3];
Dmatrix_t S_Max,D_Max;
S_Max.hang=3;S_Max.lie=4;
S_Max.datap =(double *)S_arr;
D_Max.hang=4;D_Max.lie=3;
D_Max.datap =(double *)D_arr;
int i,j;
for(i=0;i<S_Max.hang;i++)
{
for(j=0;j<S_Max.lie;j++)
{
S_arr[i][j]=(i+1)*10+j+1;
}
}
if(Dmatrix_Trans(&D_Max,&S_Max))
{
Dmatrix_print(&S_Max,"S_Max");
Dmatrix_print(&D_Max,"D_Max");
}
printf("Hello world!\n");
return 0;
}