我已经搜索过类似的情况,但是已经写了一个空白,所以我在这里发布我的问题:
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分配空间。
答案 0 :(得分:1)
正如我理解结构的字段row
,col
被用作计数器......所以你可以这样做,但是当你初始化它们并在条件中使用时要小心:
而不是
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++)
修改强>
中的逗号操作