在 C 中将两个矩阵相乘时,我在这里遇到了一些有趣的问题
当我使用数组表示法时,事情进展得非常好,就像 声明int m1,m2,n1,n2,a[20][20],b[20][20],c[20][20],i,j,k,term=0;
然后扫描所有内容并获取每个术语
for(i=0;i<m1;i++)
{
for(j=0;j<n2;j++)
{
for(k=0;k<n1;k++)
term += a[i][k] * b[k][j] ;
c[i][j]=term;
term=0;
}
}
这是完美的。
但只使用指针就像声明一样int m1,m2,n1,n2,*a,*b,*c,i,j,k,term=0;
然后扫描行数和列数,然后
a=malloc(m1*n1*sizeof(int));
b=malloc(m2*n2*sizeof(int));
c=malloc(m1*n2*sizeof(int));
然后扫描每个条目
for(i=0;i<m1;i++)
{
for(j=0;j<n1;j++)
scanf("%d",a+i*m1+j);
}
直到这里一切都很好。 但是要计算结果矩阵
for(i=0;i<m1;i++)
{
for(j=0;j<n2;j++)
{
for(k=0;k<n1;k++)
{
term += *(a+m1*i+k) * (*(b+k*m2+j));
}
*(c+m1*i+j)=term;
term=0;
}
}
事情发生得很好,但结果矩阵的最后一行给出了不正确的答案!!
我做错了什么? 请帮忙!!
你有m1
行n1
元素。所以为了解决a[i][j]
,计算应该是a+i*n1+j
的,即"跳过i
行n1
元素,然后取该行的第j
个元素。