我正在学习在Pointers的帮助下实现维数组,偶然发现了一个程序 - 矩阵的乘法,但有指针。我已经理解了Matrix乘法程序而不使用指针。它是这样的:
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];
使用指针,代码如下:
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));
我没有得到上面的代码,它们究竟是什么取消引用哪个星号代表乘法?
对不起我的无知,提前致谢(:
答案 0 :(得分:1)
所有这些矩阵都是两级数组,由一组指向数组的指针组成。这使得有点难以用后一种方式来做。
首先,您需要找到指向所需数组的指针。这是第一次拒绝*(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%。