将二维数组传递给C中的函数

时间:2014-11-05 19:18:41

标签: c arrays function matrix

#include <iostream>
#include <math.h>
#include <stdio.h>
#define column 3
#define row 3
#define share 3

int matrix_multiplication(int left_matrix[][column], int right_matrix[][column], int result_matrix[][column], int rows, int cols, int shared);

int A[][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
},
B[][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
}, C[3][3]; //initialize "hard coded" three matrices

int main() {
    matrix_multiplication(A, B, C, row, column, share); //passes address of each matrix to function
    return 0;
}

int matrix_multiplication(int left_matrix[][column], int right_matrix[][column], int result_matrix[][column], int rows, int cols, int shared) {
    int i, j, k;

    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {//stays within first column and row through first iteration
            for (k = 0; k < 3; k++)//ensures inner dimensions match with variable k i.e. ixk * kxj =ixj or A*B=C
                result_matrix[i][j] += right_matrix[i][k] * left_matrix[k][j]; //C programming has ability to perform matrix multiplication
            //Adds result of each operation to C matrix i.e. +=
            printf("%d\t", result_matrix[i][j]); //matrix C is composed of rows(i) and columns(j)
        }//new tab after each column iteration
        printf("\n"); //new line for each row iteration
    }
    return 0;
}

此代码是使用指针将多维数组传递给函数并在多重复制后打印多维数组的一个很好的示例。有多种方法可以指示编译器的指针。我建议看到&#34;将2维数组传递给函数的正确方法。&#34;例如:

/*void display(int (*p)[numcols],int numRows,int numCols)//First method//
void dispaly(int *p,int numRows,int numCols) //Second Method//
void dispaly (int p[][numCols],int numRows,int numCols)  //Third Method*/

1 个答案:

答案 0 :(得分:1)

删除column变量,并将其添加到matrix_multiplication函数声明:

之上
#define column 3

(您可能还想将column重命名为COLUMNS。)

在C ++中你也可以这样做:

static const int column = 3;

或者,在C ++ 11中:

constexpr int column = 3;

这一切背后的想法是,在编译时必须知道多维数组的第一个大小。


要解决expected primary-expression before ']' token"错误,请将内部分配更改为以下内容:

result_matrix[i][j] += right_matrix[i][k] * left_matrix[k][j];

此外,您应首先使用0初始化result_matrix


同时从*删除int *result_matrix[][column]

如果您传递的是int而不是int*,则大多数现代编译器都会显示警告。请启用编译器中的所有警告,重新编译,修复它们,并更新您的问题,说明示例代码干净地编译,没有警告。


要打印矩阵的元素,您必须指定要打印的元素:

printf("%d\t", result_matrix[i][j]);

当您省略[i][j]时,我无法相信您的编译器没有显示警告。警告是为了您的利益:它们表示代码中可能存在的错误。