繁体   English   中英

使用指针进行矩阵乘法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM