2014-11-05 102 views
-3
#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; 
} 

此代码是将多维数组传递给使用指针并在多重数组之后打印多维数组的函数的一个很好的示例。有多种方式可以指示编译器的指针。我建议看到“将2维数组传递给函数的正确方法”。例如:将二维数组传递给C中的函数

/*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*/ 
+0

二维数组是“int **”,而不是“int *”。乘法线上出现什么错误? – 2014-11-05 19:24:24

+3

@JasonBaker不,'int **'不是** 2d **数组,它是一个指针数组。 – d3L 2014-11-05 19:25:52

+1

您不能在c或C++中将2d数组作为参数传递为简单的'int arr [] []'参数。 – Jay 2014-11-05 19:26:46

回答

1

取出column变量,并添加这个matrix_multiplication函数声明之上:

#define column 3 

(您可能还需要重命名columnCOLUMNS。)

在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]; 

你也应该先初始化result_matrix与0。


而且从int *result_matrix[][column]删除*

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


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

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

我不能相信,当你忽略你的编译器不显示警告[i][j]。警告是为了您的好处:它们表明您的代码中可能存在错误。

+0

也许我没有关注,我已经删除了列变量并将其替换为上面的指令#define第3列函数原型语句。 – 2014-11-06 00:14:07

+1

'int * result_matrix [] [column]'也是错的,'printf(“%d \ t”,result_matrix)''很勇敢,但注定要失败。 – 2014-11-06 00:19:36

+0

它是int * result_matrix [] [column]。不能相信我错过了这一点。 3X3使用新选项卡printf行正确打印,但3X3阵列中的值均为4223008。 – 2014-11-06 00:33:11