#include<iostream>
using namespace std;
int main(){
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][0];
int *p = a[0];//行地址
int *q = b[0];
//矩阵乘法运算
//①静态写法
int result[3][2]={};
int *r=result[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列 *(p+i*4+k) ---*(q+k*4+j)
int a1=*(p+i*4+k);//i*a矩阵的列数(4)
int b1=*(q+k*2+j);//k*b矩阵的列数(2)
sum+=a1*b1;//+=求累加和
//cout<<*(p+i*4+k)<<"*"<<*(q+k*2+j)<<"="<<a1*b1<<endl;
}
*(r+i*2+j) = sum;
}
}
//遍历二维数组 p+i*列的长度+列
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
cout<<*(r+i*2+j)<<" ";
}
cout<<endl;
}
return 0;
}
int iSize = 3;
int jSize = 2;
int **result = new int*[iSize];
for(int i=0;i<iSize;i++){
result[i] =new int[jSize];
}
int *r =result[0];
使用指针访问二维数组的两种方式
- 指针指向整个数组
获取第i行j列的元素为*(p[i]+j)
int *p = &a;
int *q = &b;
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列 *(p+i*4+k) ---*(q+k*4+j)
int a1=*(p[i]+k);//采用下标访问
int b1=*(q[k]+j);//
sum+=a1*b1;//+=求累加和
//cout<<*(p+i*4+k)<<"*"<<*(q+k*2+j)<<"="<<a1*b1<<endl;
}
*(r+i*2+j) = sum;
}
}
- 指针指向第一行地址
获取第i行j列的元素为*(p+i*该数组的列长+j)
int *p = a[0];//行地址
int a1=*(p+i*4+k);//其中4为数组a的列长
指针遍历一维数组
int a[3]={1,2,3};
int *p = a;
//遍历一维数组
for(int i=0;i<3;i++){
cout<<*(p+i)<<endl;
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。