为什么在将矩阵传递给函数时出现编译错误
Why do I get compilation error while passing a matrix to a function
请问我哪里错了?我需要将矩阵传递给函数以进行打印,但是当我编译它时出现一些错误。因为我传递的是矩阵,所以我使用了 **p 但我不知道为什么会出现编译错误。
这是编译错误:
ricorsione_TdE_19_02_2018.c: In function ‘main’:
ricorsione_TdE_19_02_2018.c:26:9: warning: passing argument 1 of ‘stampa’ from incompatible pointer type [-Wincompatible-pointer-types]
26 | stampa(M,i,j);
| ^
| |
| int (*)[2]
ricorsione_TdE_19_02_2018.c:4:19: note: expected ‘int **’ but argument is of type ‘int (*)[2]’
4 | void stampa(int **p, int i, int j);
#include <stdio.h>
#define MAX 2
void stampa(int **p, int i, int j);
int m=0,n=0;
int main(){
int i,j,M[MAX][MAX];
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf ("Inserisci il valore della cella M[%d][%d]: ", i, j);
scanf("%d", &M[i][j]);
}
}
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf("%d", M[i][j]);
}
printf("\n");
}
stampa(M,i,j);
return 0;
}
void stampa(int **p, int i, int j) {
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf("%d", p[i][j]);
}
printf("\n");
}
return;
}
作为 @Some programmer dude 链接,常量边界矩阵的存储方式不同于指向指针的指针,因此这些类型不兼容。
修复非常简单,只需更改原型即可:
void stampa(int p[MAX][MAX], int i, int j);
请问我哪里错了?我需要将矩阵传递给函数以进行打印,但是当我编译它时出现一些错误。因为我传递的是矩阵,所以我使用了 **p 但我不知道为什么会出现编译错误。
这是编译错误:
ricorsione_TdE_19_02_2018.c: In function ‘main’:
ricorsione_TdE_19_02_2018.c:26:9: warning: passing argument 1 of ‘stampa’ from incompatible pointer type [-Wincompatible-pointer-types]
26 | stampa(M,i,j);
| ^
| |
| int (*)[2]
ricorsione_TdE_19_02_2018.c:4:19: note: expected ‘int **’ but argument is of type ‘int (*)[2]’
4 | void stampa(int **p, int i, int j);
#include <stdio.h>
#define MAX 2
void stampa(int **p, int i, int j);
int m=0,n=0;
int main(){
int i,j,M[MAX][MAX];
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf ("Inserisci il valore della cella M[%d][%d]: ", i, j);
scanf("%d", &M[i][j]);
}
}
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf("%d", M[i][j]);
}
printf("\n");
}
stampa(M,i,j);
return 0;
}
void stampa(int **p, int i, int j) {
for (i=0; i < MAX; i++){
for (j=0; j < MAX; j++){
printf("%d", p[i][j]);
}
printf("\n");
}
return;
}
作为 @Some programmer dude 链接,常量边界矩阵的存储方式不同于指向指针的指针,因此这些类型不兼容。
修复非常简单,只需更改原型即可:
void stampa(int p[MAX][MAX], int i, int j);