我是C语言的初学者,当我运行下面的代码时,我不明白为什么
#include <stdio.h>
#include <stdlib.h>
#define DIMMAX 5
#define MAXSTRINGA 20
typedef struct{
int num;
int den;
} Razionale;
typedef Razionale Matrice[DIMMAX][DIMMAX];
void aquisisciRazionale(Razionale);
void acquisisciMatrice(Matrice[DIMMAX][DIMMAX]);
void aquisisciRazionale(Razionale n){
printf("Inserire numeratore: ");
scanf("%d", &n.num);
printf("Inserire denominatore: ");
scanf("%d", &n.den);
}
void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){
int i, j;
for(i=0; i<DIMMAX; i++){
for(j=0; j<DIMMAX; j++){
aquisisciRazionale(mat[i][j]);
}
}
}
int main(int argc, char *argv[]) {
Matrice m[DIMMAX][DIMMAX];
acquisisciMatrice(m);
}
我有这个错误:
[错误]参数1的类型不兼容'aquisisciRazionale'
[注意]应为“Razionale”,但参数的类型为“struct Razionale(*)[5]”
我不知道在定义结构或函数时是否有错误。有人能帮我吗?
最佳答案
typedef已经是一个二维数组。当你声明你的函数时
void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){
你是说
Matrice
是mat
的二维数组,它是Matrice
的四维数组。Razionale
则是amat[i][j]
,而不是aMatrice
。功能应该是
void acquisisciMatrice(Matrice mat){
因为尺寸是
Razionale
typedef的一部分。您还应该在Matrice
中更改变量:Matrice m;
acquisisciMatrice(m);
注意
main()
不会填充acquisisciRazionale()
中的矩阵元素。当你打电话acquisisciRazionale(mat[i][j]);
您正在传递数组元素的副本。
acquisisciMatrice()
然后写入该副本,对原始数组没有影响。你应该传递一个指针。acquisisciRazionale(&mat[i][j]);
并将函数更改为:
void aquisisciRazionale(Razionale *n){
printf("Inserire numeratore: ");
scanf("%d", &(n->num));
printf("Inserire denominatore: ");
scanf("%d", &(n->den));
}
关于c - 为什么ide显示“参数的[Error]不兼容类型”?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37714259/