指针实现通用矩阵的相乘

来源:百度知道 编辑:UC知道 时间:2024/05/21 17:03:28
a为m*n阶的矩阵,b为n*p阶的矩阵,a矩阵乘以b矩阵得到c矩阵,c为m*p
阶矩阵,编写矩阵相乘的函数如下:
void matrixmul(float *pa,float *pb,float *pc,int m,int n,int p)
{
int i,j,k;
float t;
for(i=0;i<m;i++)
for(j=0;j<p;j++){
t=0;
for(k=0;k<n;k++) //1
t+=*(pa+i*n+k)**(pb+k*p+j); //2
*(pc+i*p+j)=t; //3
}
}
注释处什么意思啊,我看不懂啊,高手来啊
(1)这里面pa,pb,pc是指向一维数组还是二维数组的指针?
(2)pa+i*n+k,pb+k*p+j,pc+i*p+j分别什么意思,怎么看的?
书上说pa+i*n+k是第i行第k列的地址,如果i=0,变成pa+k会不会有歧义?理解成第k行起始地址?
(3)*(pa+i*n+k)**(pb+k*p+j)什么意思,看不懂;
(4)最好把函数思想跟我说一下,我不明白,好心人来,说不定你们一指点,我就懂了,不然我难理解,我再加分!

这个三个指针是一维的指针变量
这几个表达式的意思是将指针从开始移动到矩阵的末尾,分别是行和列的变化
第三个问题是就是指针指向的内容相乘后得到值
函数的主要意思就是通过循环得到c矩阵的每一个值!

就是运算的步骤吧,将矩阵的各个元素交叉相乘再求和就是一个新矩阵了,使用数组来保存矩阵,然后将数据的头元素作为指针进行传递就可以在函数中来修改矩阵了