使用指针在c中乘以矩阵

时间:2017-10-28 19:37:56

标签: c pointers matrix memory-address

当我输入两个矩阵时,结果矩阵没有显示正确的答案,我的算法是错误的还是我不应该以这种方式使用指针?  请帮忙!

main() {

    int a[3][3],b[3][3],c[3][3],*p[3],*q[3],*r[3],j1=0;

    // 1st Matrix

    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            scanf("%d",&a[i][j]);
        }
    }

    // 2nd matrix

    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            scanf("%d",&b[i][j]);
        }
    }

    // Assigning pointers

    for(int i=0;i<3;i++) p[i]=&a[i][0];
    for(int i=0;i<3;i++) q[i]=&b[i][0];
    for(int i=0;i<3;i++) r[i]=&c[i][0];

    // Resultant Matrix

    for(int i=0;i<3;i++){
        *(*(r+i)+j1) = 0;
        for(j1=0;j1<3;j1++){
            printf("%d\t",*(*(r+i)+j1));
             *(*(r+i)+j1) += *(*(p+i)+j1) * *(*(q+j1)+i);
        }
        j1 = 0;
    }

    for(int i=0;i<3;i++){
        for(int j=0;j<3;j++){
            printf("%d\t",c[i][j]);
        }
        printf("\n");
    }
}

1 个答案:

答案 0 :(得分:0)

你的循环遍历两个维度,并执行元素ab的元素乘法转换,b转置。我怀疑你想要执行矩阵乘法而不是元素乘法。要做到这一点,你需要三个循环:

  • 两个循环通过i的行和列迭代索引jc
  • 一个循环通过ka的公共维度迭代某个变量,比如b,并将a[i][k]的产品与b[k][j]相加。< / LI>