首页 > 解决方案 > 为什么将矩阵传递给函数时出现编译错误

问题描述

我可以知道我哪里错了吗?我需要将矩阵传递给函数进行打印,但是当我编译它时,我得到了一些错误。因为我传递了一个矩阵,所以我使用了 **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;
}

标签: ccompilationc99

解决方案


正如@Some程序员花花公子所链接的那样,常量边界矩阵的存储方式与指向指针的指针不同,因此这些类型是不兼容的。

修复非常简单,只需更改原型:

void stampa(int p[MAX][MAX], int i, int j);

推荐阅读