#include
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<
}
*(r+i*2+j) = sum;
}
}
//遍历二维数组 p+i*列的长度+列
for(int i=0;i<3;i++){
for(int j=0;j<2;j++){
cout<
}
cout<
}
return 0;
}
动态写法(数组大小非固定的情况)
int iSize = 3;
int jSize = 2;
int **result = new int*[iSize];
for(int i=0;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<
}
*(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<
}