我正在撰寫一個程式來計算矩陣乘法,但它不起作用。當我除錯并檢查陣列a和b函式中的每個值printMatrixMultiplication(由用戶輸入)時,GDB 列印出“cannot perform pointer math on不完整型別嘗試轉換”。(我已經搜索過了,但我仍然沒有得到它。)該函式僅在輸入在main.
這是我的代碼
#include <stdio.h>
void input(int m, int n, double a[m][n]);
void output(int m, int n, double a[m][n]);
void printMatrixMultiplication(int row_a, int col_a, double a[row_a][col_a], int row_b, int col_b, double b[row_b][col_b]);
int main()
{
int row_a, col_a, row_b, col_b;
// get value of matrix a
printf("row_a = ");
scanf("%d", &row_a);
printf("col_a = ");
scanf("%d", &col_a);
double a[row_a][col_a];
input(row_a, col_a, a);
// output(row_a, col_a, a);
// get value of matrix b
printf("row_b = ");
scanf("%d", &row_b);
printf("col_b = ");
scanf("%d", &col_b);
double b[row_b][col_b];
input(row_b, col_b, a);
// output(row_b, col_b, a);
printMatrixMultiplication(row_a, col_a, a, row_b, col_b, b);
//test
// double a[2][2]={1,2,3,4};
// double b[2][3]={1,2,3,4,5,6};
// printMatrixMultiplication(2,2,a,2,3,b);
return 0;
}
void input(int m, int n, double a[m][n])
{
int i, j;
for (i = 0; i < m; i )
{
for (j = 0; j < n; j )
{
scanf("%lf", &a[i][j]);
}
}
}
void output(int m, int n, double a[m][n])
{
int i, j;
for (i = 0; i < m; i )
{
for (j = 0; j < n; j )
{
printf("%.2f ", a[i][j]);
}
printf("\n");
}
}
void printMatrixMultiplication(int row_a, int col_a, double a[row_a][col_a], int row_b, int col_b, double b[row_b][col_b])
{
if (col_a != row_b)
{
return;
}
double res[row_a][col_b]; //this matrix store results
for (int i = 0; i < row_a; i ) //the values be stored line by line, this
{ //operation is controled by i and j loops.
for (int j = 0; j < col_b; j ) //the k loop helps calculate dot_product.
{
double dot_product = 0;
for (int k = 0; k < col_a; k )
{
dot_product = a[i][k] * b[k][j]; //ERROR HERE
}
res[i][j] = dot_product;
}
}
output(row_a, col_b, res);
}
那么,錯誤來自哪里以及如何修復它?
不相關,但該功能沒有很好地實作,所以如果可能的話,如果有人給我一個改進它的提示,我將不勝感激。
我正在使用 GCC 版本 6.3.0。
uj5u.com熱心網友回復:
閱讀 matrix 時,這是您的代碼中的錯字b。
只需更換:
input(row_b, col_b, a);
和
input(row_b, col_b, b);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/366732.html
