C++ 指针 矩阵乘法运算

今天学会:使用指针进行矩阵的乘法运算

	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的结果矩阵

然后遍历矩阵,打印输出。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值