使用指针

时间:2016-05-06 16:41:57

标签: c pointers matrix

我正在学习在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));

我没有得到上面的代码,它们究竟是什么取消引用哪个星号代表乘法?

对不起我的无知,提前致谢(:

1 个答案:

答案 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%。