我想知道输入俩个三行三列矩阵,矩阵进行相乘操作,用行指针实现的原理
矩阵相乘,结果矩阵的第i行j列的元素就是矩阵a的i行成语矩阵b的j列的元素和。
代码如下,如有帮助,请帮忙采纳一下,谢谢。
#include <stdio.h>
#include <stdlib.h>
int main()
{
int i,j,t;
int **a,**b;
int c[3][3];
a = (int **)malloc(sizeof(int*)*3);
b = (int **)malloc(sizeof(int*)*3);
//给数组赋值
for (i=0;i<3;i++)
{
a[i] = (int*)malloc(sizeof(int)*3);
b[i] = (int*)malloc(sizeof(int)*3);
for (j=0;j<3;j++)
{
a[i][j] = i;
b[i][j] = i+1;
}
}
//打印数组a
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
//打印数组b
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
printf("%d ",b[i][j]);
}
printf("\n");
}
//矩阵相乘
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
{
c[i][j] = 0; //c[i][j] 是数组a的i行和数组b的j列对应数据相乘后的和
for(t = 0;t<3;t++)
c[i][j] += (*(a+i))[t] * b[t][j]; //(*(a+i)) 就是a的第i+1行指针
printf("%4d",c[i][j]);
}
printf("\n");
}
//释放指针
for (i=0;i<3;i++)
{
free(a[i]);
free(b[i]);
a[i] = 0;
b[i] = 0;
}
free(a);
free(b);
return 0;
}