簡體   English   中英

將二維數組傳遞給 c 中的 function 時出錯

[英]Error when passing 2D array to function in c

我正在編寫一個程序來計算矩陣乘法,但它不起作用。 當我調試並檢查 function printMatrixMultiplication (由用戶輸入)中數組ab的每個值時,GDB 會打印出"cannot perform pointer math on incomplete type try cast" (我已經搜索過它,但我仍然沒有得到它。) function 僅在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);
}

那么,錯誤來自哪里以及如何解決呢?

無關緊要,但是 function 沒有很好地實現,所以如果可能的話,如果有人給我提示以改進它,我將不勝感激。

我正在使用 GCC 版本 6.3.0。

閱讀矩陣b時,這是您的代碼中的錯字。

只需更換:

input(row_b, col_b, a);

input(row_b, col_b, b);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM