我是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]){

你是说Matricemat的二维数组,它是Matrice的四维数组。Razionale则是amat[i][j],而不是aMatrice
功能应该是
void acquisisciMatrice(Matrice mat){

因为尺寸是Razionaletypedef的一部分。您还应该在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/

10-11 20:55