C++ 将矩阵与C+中的另一个矩阵相乘+;

C++ 将矩阵与C+中的另一个矩阵相乘+;,c++,math,multidimensional-array,multiplication,C++,Math,Multidimensional Array,Multiplication,我的作业有问题,我有三个矩阵。我应该将第一个(a)乘以第二个(b),结果返回第三个(c)。同样值得一提的是,我只能通过指针移动,不能在循环中使用索引 主要问题是当dim1==dim且矩阵不是平方1时。所有的都应该用C++编写。我的代码返回了几乎很好的结果,但看起来在第一行我传递了垃圾值。看起来我没有用值填充这些。我非常感谢你的帮助。谢谢 void multiply(int* a[], int* b[], int* c[], int dim1, int dim2, int dim3

我的作业有问题,我有三个矩阵。我应该将第一个(a)乘以第二个(b),结果返回第三个(c)。同样值得一提的是,我只能通过指针移动,不能在循环中使用索引

主要问题是当dim1==dim且矩阵不是平方1时。所有的都应该用C++编写。我的代码返回了几乎很好的结果,但看起来在第一行我传递了垃圾值。看起来我没有用值填充这些。我非常感谢你的帮助。谢谢

void multiply(int* a[], int* b[], int* c[], int dim1, int dim2, int
        dim3){

    for(int i = 0; i < dim1; i++){
        for(int j = 0; j < dim3; j++){
            for( int k = 0; k < dim2; k++){
                *(*(c+i)+j) += *(*(a+i)+k) * *(*(b+k)+j);
            }
        }
    }

    for(int i = 0; i < dim1; i++){
        for(int j = 0; j < dim3; j++){
            cout << *(*(c+i)+j) << "\t";
        }
        cout << endl;
    }
}

int main(){ 
    const int dim1 = 3;
    const int dim2 = 2;
    const int dim3 = 3;


    int a[dim1][dim2] = {{1,2},{3,4},{5,6}};
    int b[dim2][dim3] = {{1,2,3},{4,5,6}};
    int c[dim1][dim3] = {};

    int *tab1 [dim1];
    int *tab2 [dim2];
    int *tab3 [dim3];


    for(int i = 0; i < dim1; i++){
        *(tab1+i) = *(a+i);
        *(tab2+i) = *(b+i);
        *(tab3+i) = *(c+i); 
    }

    multiply(tab1,tab2,tab3,dim1,dim2,dim3);
}                                                                        
无效乘法(int*a[],int*b[],int*c[],int-dim1,int-dim2,int dim3){ 对于(int i=0;icout除了
tab
初始化之外,其他都是正确的。您可以迭代到
dim1=3
,但是
tab2
dim2=2
大小。请尝试以下操作:

const int dim1 = 3;
const int dim2 = 2;
const int dim3 = 3;

void multiply(int a[dim1][dim2], int b[dim2][dim3], int c[dim1][dim3], int dim1, int dim2, int
        dim3){

    for(int i = 0; i < dim1; i++){
        for(int j = 0; j < dim3; j++){
            for( int k = 0; k < dim2; k++){
                *(*(c+i)+j) += *(*(a+i)+k) * *(*(b+k)+j);
            }
        }
    }

    for(int i = 0; i < dim1; i++){
        for(int j = 0; j < dim3; j++){
            cout << *(*(c+i)+j) << "\t";
        }
        cout << endl;
    }
}

int main()
{
    int a[dim1][dim2] = {{1,2},{3,4},{5,6}};
    int b[dim2][dim3] = {{1,2,3},{4,5,6}};
    int c[dim1][dim3] = {};

    multiply(a,b,c,dim1,dim2,dim3);
}
const int dim1=3;
常数int dim2=2;
常数int dim3=3;
空乘(整数a[dim1][dim2]、整数b[dim2][dim3]、整数c[dim1][dim3]、整数dim1、整数dim2、整数
dim3){
对于(int i=0;ik
循环之前设置
*(*(c+i)+j)=0