C - 结构中的矩阵乘法

时间:2015-02-19 06:45:21

标签: c pointers matrix struct

我已经搜索过类似的情况,但是已经写了一个空白,所以我在这里发布我的问题:

void mtxmulti(struct matrix mAx, struct matrix mBx, struct matrix mCx) {
    printf("A * B:\n");
    if ((mAx.nrows == mBx.nrows) && (mAx.ncols == mBx.ncols)) {
        for (mAx.row = 0, mBx.row = 0; mAx.row < mAx.nrows, mBx.row < mBx.nrows; mAx.row++, mBx.row++) {
            for (mAx.col = 0, mBx.col = 0; mAx.col < mAx.ncols, mBx.col < mBx.ncols; mAx.col++, mBx.col++) {
                mCx.matrix[mCx.row][mCx.col] += mAx.matrix[mAx.row][mAx.col] * mBx.matrix[mBx.row][mAx.col];
            }
        }
        mtxpr1t(mCx); /*If successful, prints the matrix*/
    }
}

你在这里看到的是我将两个矩阵相乘的函数,但是当我尝试运行时它会崩溃。

代码的其他有用部分:

struct matrix {
    int** matrix;
    int row, col, nrows, ncols;
};

int main(void) {
    struct matrix A, B, C;
    printf("Enter the number of rows and columns for A: ");
    scanf("%d %d", &A.nrows, &A.ncols);
    A.matrix = alloc(A.nrows, A.ncols); /*Allocates array*/
    /*. This part of code is 
      . just entering the values 
      . of the matrix*/ 
    printf("Enter the number of rows and columns for B: ");
    scanf("%d %d", &B.nrows, &B.ncols);
    A.matrix = alloc(A.nrows, A.ncols); /*Allocates array*/
    /*. This part of code is 
      . just entering the values 
      . of the matrix*/
    mtxmulti(A, B, C);
}

仅供参考:我被告知使用未初始化的本地变量'C',因此不起作用。我不需要初始化矩阵A和B,虽然我确实为它们分配了空间,如上节所示。分配如下:

int** all0c(struct matrix mtx) {
mtx.matrix = (int**)(malloc(mtx.nrows*sizeof(int*)));
for (mtx.row = 0; mtx.row < mtx.nrows; mtx.row++)
    mtx.matrix[mtx.row] = (int*)(malloc(mtx.ncols*sizeof(int)));
return mtx.matrix;
}

修改

我设法通过打印答案来解决问题。因此,这不需要为矩阵C分配空间。

1 个答案:

答案 0 :(得分:1)

正如我理解结构的字段rowcol被用作计数器......所以你可以这样做,但是当你初始化它们并在条件中使用时要小心:

而不是

  for (mAx.row = 0, mBx.row; mAx.row < mAx.nrows, mBx.row < mBx.nrows; mAx.row++, mBx.row++)

  for (mAx.row = 0, mBx.row = 0; mAx.row < mAx.nrows && mBx.row < mBx.nrows; mAx.row++, mBx.row++)

修改

阅读C++ references

中的逗号操作