为什么ide显示“[Error]不兼容的参数类型”?

时间:2016-06-08 22:56:10

标签: c

我是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);

}

我有这个错误:

  

[错误]'aquisisciRazionale'的参数1的不兼容类型

     

[注意]预期'Razionale'但参数类型为'struct Razionale(*)[5]'

我不明白定义结构或定义函数时是否有错误。有人能帮助我吗?

1 个答案:

答案 0 :(得分:2)

Matrice typedef已经是一个二维数组。声明函数时

void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){

您说matMatrice的二维数组,是Razionale的四维数组。 mat[i][j]Matrice,而不是Razionale

该功能应该是

void acquisisciMatrice(Matrice mat){

因为维度是Matrice typedef的一部分。您还应该更改main()中的变量:

Matrice m;
acquisisciMatrice(m);

请注意,acquisisciRazionale()不会填写acquisisciMatrice()中的矩阵元素。当你打电话

acquisisciRazionale(mat[i][j]);

您正在传递数组元素的副本。然后scanf()写入该副本,这对原始数组没有影响。你应该传递一个指针。

acquisisciRazionale(&mat[i][j]);

并将功能更改为:

void aquisisciRazionale(Razionale *n){

    printf("Inserire numeratore: ");
    scanf("%d", &(n->num));
    printf("Inserire denominatore: ");
    scanf("%d", &(n->den));

}