c - 为什么将矩阵传递给函数时出现编译错误
问题描述
我可以知道我哪里错了吗?我需要将矩阵传递给函数进行打印,但是当我编译它时,我得到了一些错误。因为我传递了一个矩阵,所以我使用了 **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程序员花花公子所链接的那样,常量边界矩阵的存储方式与指向指针的指针不同,因此这些类型是不兼容的。
修复非常简单,只需更改原型:
void stampa(int p[MAX][MAX], int i, int j);
推荐阅读
- sql - 如何按日期获取输出
- javascript - 使用 react-export-excel 导出没有数据的 Excel 文件
- reactjs - useEffect:依赖数组无法防止无限重新渲染
- java - 如何将在线支付方式集成到我的 Android Studio 应用程序中?
- prolog - 将二进制转换为十进制谓词
- java - MySqlPool quarkus 反应式客户端不会自动关闭
- sql - JOIN 键中的重复值会影响返回的结果吗?
- ionic4 - 离子水平滚动条和切换菜单
- sql - 运行sql查询时如何将日期(不是日期时间)转换为纪元格式?
- node.js - 运行 npm 以在 ADO 存储库中生成包以允许它通过 terraform 创建管道时出错