题目是大概如下:
后来去看了一下书里的参考答案,感觉有点不大对(但是没有验证过)。原型给的好像就不大对,这个原型:
void matrix_multiply(int *m1, int *m2, int *r, int x, int y, int z);
一般如果在参数里面是指针数组的话,需要指明这个指针指向的数组的大小,例如int(*m1)[10] ,所以对于题目给出的原型比较疑惑,而参考答案也没有那样做。参考答案也和题目本身的原型不一样,把int *r改成了register类型。所以我感觉把原型改了,只要出来的结果一样,也算解答对了。当然效率问题以后再说(等学完汇编)
因为可变参数,需要先声明数组大小的int(根据刚学的《C Primer Plus》,所以我给出的原型:
void matrix_mutiplay(int x, int y, int z, int (*m1)[y], int (*m2)[z], int (*r)[z]);
矩阵相乘以前是学过,现在差不多都忘光了。好在根据题目,大概能猜出意思。
看一个3X2的矩阵 与一个 2X 4 的矩阵相乘 ,这里前一个矩阵的列要和 后一个矩阵的行相等,不然就不配了, 就会生成一个3X4的矩阵。 然后这个3X4的矩阵地每个元素, 就是对应元素相乘后的和,例如(00,01的前一个