我發現了三個錯誤:警告在矩陣乘法使用函數
- 分配時將指針整數,未作鑄造
- 從兼容的指針類型傳遞的
read
參數1 - 預期
int * (*)[10]
但參數是類型的int (*)[10][10]
下面是代碼:
#include <stdio.h>
#include <stdlib.h>
void read(int *(arr[10][10]), int row, int col) { //Third error here
int i, j;
for (i = 0; i < row; i++)
for (j = 0; j < col; j++)
scanf("%d", &arr[i][j]);
}
void multiply(int arr1[10][10], int row1, int col1,
int arr2[10][10], int row2, int col2,
int *prod[10][10]) { //Third error here
int i, j, k, temp;
for (i = 0; i < row1; i++)
for (j = 0; j < col2; j++) {
temp = 0;
for (k = 0; k < col1; k++)
temp += arr1[i][k] * arr2[k][j];
prod[i][j] = temp; //First error here
}
}
void display(int arr[10][10], int row, int col) {
int i, j;
for (i = 0; i < row; i++) {
for (j = 0; j <col; j++)
printf("%d\t",arr[i][j]);
printf("\n");
}
}
int main() {
int a[10][10], b[10][10], c[10][10], m, n, p, q, i, j, k;
printf("Enter the order of matrix A:");
scanf("%d %d", &m, &n);
printf("Enter the order of matrix B:");
scanf("%d %d", &p, &q);
if (n != p) {
printf("Matrix multiplication is not possible.");
exit(0);
}
printf("Enter the elements of matrix A:\n");
read(&a, m, n); //Second error here
printf("Enter the elements of matrix B:\n");
read(&b, p, q); //Second error here
multiply(a, m, n, b, p, q, &c);
printf("Matrix A is:\n");
display(a, m, n);
printf("Matrix B is:\n");
display(b, p, q);
printf("Product matrix is:\n");
display(c, m, q);
return 0;
}
數組不是第一類對象,所以你不應該只是複製了'int'什麼工作,並把它轉變爲一個數組版本。這段代碼很FOOBAR,很難全面解釋。 – user3528438
在問一個問題之前檢查重複http://stackoverflow.com/questions/14548753/passing-a-multidimensional-variable-length-array-to-a-function – tano
@ user3528438:我不確定你的意思是* FOOBAR *,也許是FUBAR?但這會被恕我直言的誇大。類型是錯誤的,可以很容易地修復,其餘的很簡單。 – chqrlie