[英]Matrix multiplication using pointers
我正在学习借助指针来实现维数组,偶然发现了一个程序-矩阵乘法,但带有指针。 我已经了解了不使用指针的矩阵乘法程序。 它是这样的:
for(i=0; i<r1; ++i)
for(j=0; j<c2; ++j)
for(k=0; k<c1; ++k)
mult[i][j]+=a[i][k]*b[k][j];
使用Pointers ,代码是这样的:
for(i=0;i<r1;i++)
for(j=0;j<c2;j++)
for(k=0;k<c1;k++)
*(*(c+i)+j)+=*(*(a+i)+j)*(*(*(b+k)+j));
我没有上面的代码,它们究竟是什么解引用,以及哪个星号表示乘法?
抱歉,我的无知,在此先感谢(:
所有这些矩阵都是两级数组,由指向值数组的指针数组组成。 这使得以后者的方式进行操作有点难看。
首先,您需要找到指向所需数组的指针。 那是第一次取消引用*(c+i)
。 然后,从该数组中添加所需的项目并再次取消引用,因此它变为*(*(c+i)+j)
。 这就是全部。
现在唯一实际的乘法是右括号和右括号之间的星号:
*(*(c+i)+j)+=*(*(a+i)+j) * (*(*(b+k)+j));
^ this
如果该代码对您来说很难看,我可以告诉您一些有用的信息:您也可以将第一种类型的代码与指针一起使用。 c[i]
与*(c+i)
完全相同。 所以就用
c[i][j] += a[i][j] * b[k][j];
并保证您的生活至少改善7.935%。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.