今天学会:使用指针进行矩阵的乘法运算
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
int b[4][2]={{1,2},{3,4},{5,6},{7,8}};
int *p=a[0];//行地址
int *q=b[0];//行地址
//矩阵的乘法运算,静态写法
int reslut[3][2]={};//定义结果空矩阵,占空
int *r=reslut[0];//结果矩阵行地址
for (int i=0; i<3;i++)
{
for (int j=0;j<2;j++)
{
int sum=0;//记录累加和
for (int k=0; k<4;k++)//k指第一个矩阵要遍历的行的列坐标(也是第二个矩阵的行坐标)
{
//矩阵a的第i行,矩阵b的的第j列
int a1=*(p+i*4+k);//i*a矩阵的列数(4) 遍历二维数组,p+第i行*列的长度+列
int b1=*(q+k*2+j);//k*b矩阵的列数(2)
sum+=a1*b1;
}
*(r+i*2+j)=sum;//将值存放在结果矩阵的相应位置
}
}
for (int i=0;i<3;i++)
{
for (int j=0;j<2;j++)
{
cout<<reslut[i][j]<<" ";
}
cout<<endl;//输出结果矩阵
}
a1=*(p+i*4+k)代表的意思是矩阵a中第i行,第k列位置上的数值,即a[i][k]
*p代表的是a[0],所以是a矩阵,a矩阵有4列,所以是i*4;
b1=*(p+k*2+j)同理,代表的是b[k][j]
a的第零行乘以b的第0列值的和,为结果矩阵中第0行第0列的值,reslut[0][0]。
所以将结果放在*(r+i*2+j)的位置上去,最后的到3*2的结果矩阵
然后遍历矩阵,打印输出。