我试图编写一个代码来获取矩阵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]
为什么会这样?我似乎无法找到这个错误。
答案 0 :(得分:1)
尝试
*(C+column_C*i+j)=sum;
创建用于访问矩阵元素的函数或宏可能是个主意。这样可以避免将来出现类似的问题。比使用方法制作矩阵类更好。