AB矩阵相乘--C和指针--第八章数组,编程练习第五题
x行y列的矩阵A,y行z列的矩阵B,将AB相乘,其结果是一个x行z列的矩阵C
编写一个函数用于执行两个矩阵的乘法
void matrix_multiply(int *m1,int *m2,int *r,int x,int y, int z);
* A : 2 -6 B : 4 -2 -4 -5
* 3 5 -7 -3 6 7
* 1 -1
C应该为3行4列
矩阵C,第1行第1列的值为: (2 * 4) + (-6 * -7) = 50
第3行第4列的值为: (1*-5)+(-1 * -7) = -12
编写一个函数用于执行两个矩阵的乘法
void matrix_multiply(int *m1,int *m2,int *r,int x,int y, int z);
* A : 2 -6 B : 4 -2 -4 -5
* 3 5 -7 -3 6 7
* 1 -1
C应该为3行4列
矩阵C,第1行第1列的值为: (2 * 4) + (-6 * -7) = 50
第3行第4列的值为: (1*-5)+(-1 * -7) = -12
void matrix_multiply(int* m1, int* m2, int* r, int x, int y, int z) { register int* m1p; register int* m2p; for (int row = 0; row < x; row++) //该循环为A矩阵所用 { for (int col = 0; col < z; col++) //为B矩阵所用 { m1p = m1 + row * y; //获取A矩阵的元素值。每次从上层for循环进入此层循环时,为m1p赋新值,为第row行的首元素 m2p = m2 + col; //B矩阵的元素值。 每次将一个当前行的元素值赋给m2p. *r = 0; for (int i = 0; i < y; i++) //计算C矩阵当前行的各个元素的值。 { *r += *m1p * *m2p; m1p++; //同行不同列的元素 m2p += z; //同列不同行的元素 } r++; //下一行 } } }