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)
{
    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++;    //下一行
        
        }

    }

}

相关