void matrix_multiply1(int (*m1)[2], int (*m2)[4], int (*r)[4],
int x, int y, int z)
#include
void matrix_multiply(int *m1, int *m2, int *r,
int x, int y, int z)
{
int i, j, k;
for (i = 0; i < x; ++i)
{
for (j = 0; j < z; ++j)
{
//p1表示第一个矩阵的行
int *p1 = m1 + i * y;
//p2表示第二个矩阵的列
int *p2 = m2 + j;
for (k = 0; k < y; ++k)
{
*r += *p1 * *p2;
if (k < y -1)
{
//行向右移动
++p1;
//列向下移动
p2 += z;
}
}
++r;
}
}
}
void matrix_multiply1(int (*m1)[2], int (*m2)[4], int (*r)[4],
int x, int y, int z)
{
int i, j, k;
int temp;
for (i = 0; i < x; i++)
{
for (j = 0; j < z; j++)
{
temp = 0;
for (k = 0; k < y; k++)
{
temp += *(*(m1 + i) + k) * *(*(m2 + k) + j);
}
*(*(r + i) + j) = temp;
printf("%d\t", *(*(r + i) + j));
}
printf("\n");
}
}
int main()
{
int m1[3][2] = {{2, -6}, {3, 5}, {1, -1}};
int m2[2][4] = {{4, -2, -4, -5}, {-7, -3, 6, 7}};
int r[3][4] = {0};
matrix_multiply(m1,m2,r,3,2,4);
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
printf("%d\t", r[i][j]);
printf("\n");
}
printf("*****\n");
int r1[3][4] = {0};
matrix_multiply1(m1,m2,r1,3,2,4);
return 0;
}