我想写一个代码,得到一个矩阵A
和它的维度,一个矩阵B
和它的维度,并返回一个矩阵C
,使C=AB
。
可以安全地假设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
是"矩阵"A
中的列数。
我的问题是,我的代码不工作的一些输入时,row_C != column_C
例如,如果A=[28,8,12;14,5,45]
和B=[31;27;11]
,它返回C=[1216;-842150451]
为什么会发生这种情况?我好像找不到错误
Try
*(C+column_C*i+j)=sum;
创建一个函数或宏来访问矩阵元素可能是个好主意。这样就可以避免将来出现类似的问题。