在 C 中使用指针表示法对矩阵进行乘法

  • 本文关键字:表示 指针 c pointers
  • 更新时间 :
  • 英文 :


在 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;
}
}

事情发生得很好,但结果矩阵的最后一行给出了不正确的答案!!

我做错了什么? 请帮忙!!

你有m1n1元素。所以为了解决a[i][j],计算应该是a+i*n1+j的,即"跳过in1元素,然后取该行的第j个元素。