C++指针矩阵乘法运算

#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;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。