运行代码时出错 - 从没有强制转换的整数生成指针

时间:2017-01-12 01:54:23

标签: c arrays multidimensional-array compiler-errors compiler-warnings

我正在尝试运行我的代码但是我得到了5个错误,而且它们都是同一类型。 第一个是:

  

注意:预期'int(*)[3]'但参数的类型为'int'

例如,在我的代码的这一部分(它指出你在这里看到这个词的行

HERE-> int isNeighbourClose(int mat[N][M], int i, int j, int a, int b){

     int m;

     m=calcDistance(mat[i][j], mat[a][b]);
     if(m<=1)
     {
         return 1;
     }
     return 0;
   }

另一个是:

  

错误:传递'isNeighbourClose'的参数1使得整数指针没有强制转换

例如,我的代码的这一部分

int isCellExtreme(int mat[N][M], int i, int j){

    int a, b;
    int m;

    for(a=-1;a<=1;a++)
    {
        if((i+a>=0) && (i+a<=N))
        {
            for(b=-1;b<=1;b++)
            {
                if((j+b>=0) && (j+b<=M))
                {
                    if((a!=0)||(b!=0))
                    {
          HERE->          m=isNeighbourClose(mat[N][M], i, j, i+a, j+b);
                        if(m)
                        {
                            return 0; 
                        }
                    }
                }
            }
        }
    }
    return 1;
}

我经历了几次,但找不到问题所在。知道我哪里弄错了吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

当您将mat[N][M]传递给isNeighbourClose时,您并没有像您认为的那样传递2D数组。您在行matN处传递M的单个元素。

该函数需要一个2D数组,因此传递整个数组:

m=isNeighbourClose(mat, i, j, i+a, j+b);

编辑:

如果您有声明,请执行以下操作:

int mat[N][M];

您指定数据类型和(在本例中)数组的维度,即它表示“mat是N个M个元素的数组”。这与上面提到的使用mat表达式不同。