C语言 - 矩阵乘法错误

时间:2014-08-13 10:32:11

标签: c pointers math matrix linear-algebra

我试图编写一个代码来获取矩阵A及其维度,矩阵B及其维度,并返回一个矩阵C,使C=AB 1}}。

可以安全地假设A的列数等于B的行数,因此定义了C=AB

这是我的代码:

int *matrix_multiplication(int *A,int row_A,int column_A,int *B,int row_B,int column_B)
{
    int row_C,column_C,*C,i,j,k,sum=0;
    row_C=row_A;
    column_C=column_B;
    C=(int*)malloc(row_C*column_C*sizeof(int));
    for(i=0;i<row_C;i++)
    {
        for(j=0;j<column_C;j++)
        {
            for(k=0;k<column_A;k++)
                sum+=(*(A+column_A*i+k))*(*(B+column_B*k+j));//A[i][k]B[k][j]
            *(C+row_C*i+j)=sum;
            sum=0;
        }
    }
    return C;
}

一点解释:我将矩阵视为单维数组,大小为columns*rows*sizeof(int),给定公式为A[i][j]=*(A+column_A*i+j),其中A是指向数组第一个元素的指针, column_A是&#34;矩阵&#34;中的列数。 A

我的问题是,row_C != column_C

时,我的代码对某些输入无效

例如,如果A=[28,8,12;14,5,45]B=[31;27;11]返回C=[1216;-842150451]

为什么会这样?我似乎无法找到这个错误。

1 个答案:

答案 0 :(得分:1)

尝试

*(C+column_C*i+j)=sum;

创建用于访问矩阵元素的函数或宏可能是个主意。这样可以避免将来出现类似的问题。比使用方法制作矩阵类更好。