这是C和指针书上的一道题,充分体现了指针实现数组操作的过程
void matrix_multiply( int *m1, int *m2, int *r,
int x, int y, int z )
{
register int *m1p; //寄存器变量提高运行速度,在这可有可无
register int *m2p;
register int k;
int row;
int column;
/*
* 外层的两个循环逐个产生结果矩阵的元素。由于这是按照存在顺序
* 进行的。我们可以通过对r进行间接访问来访问这些元素。
*/
for( row=0; row
{
for( column=0; column
{
/*
* 计算结果的一个值。这是通过或得指向m1和m2的合适元素的指针,
* 当我们进行进行循环时,使他们前进来实现的。
*/
m1p = m1 + row * y;
m2p = m2 + column;
*r = 0;
for( k=0; k
{
*r += *m1p * *m2p; //r数组元素的值
m1p += 1; //m1数组的行
m2p += z; //m2数组的列
}
/* r 前进一步,指向下一个元素 */
r++;
}
}
}
本文介绍了一种使用C语言和指针实现矩阵乘法的方法。通过定义合适的指针并利用循环结构,该方法能够有效地完成两个矩阵的乘法运算,并将结果存储在一个新的矩阵中。文章提供了一个具体的代码示例,详细展示了如何通过调整指针来遍历和计算矩阵元素。
1741

被折叠的 条评论
为什么被折叠?



