这是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++;
}
}
}