警告C4047:“ int **”的间接级别与“ int [2] [4]”不同

时间:2019-01-28 17:36:01

标签: c parameters indirection

我收到此警告,并why了一下原因。我在这里发现许多线程可以解决VS 2017编译器中的此警告,但不能解决此特定组合:为什么int **与int [X] [Y]的间接级别不同?

下面是一个生成警告的精简示例:

void testfunc(int ** input, int ** output) {

  /*
  * Do something
  */

}


int main()
{


  int   firstvar[2][4];
  int   secondvar[2][4];

  testfunc(firstvar, secondvar);

}

我得到:

  

testcode.c(46):警告C4047:'function':'int **'在间接级别上不同于'int [2] [4]'

任何关于为什么会这样或如何解决它的想法都值得赞赏。

1 个答案:

答案 0 :(得分:2)

void testfunc(int input[][4], int output[][4])

将是一种更好的方式来传递这一点。请注意,int **似乎表明它是一个int *的数组,不是。

void onedimension_testfunc(int *odinput, int *odoutput)
{
     ...
}

int main ()
{
      int odfirst[4], odsecond[4];
      onedimention_testfunc(odfirst, odsecond);
}

在一维中,上述代码可以正常工作。那是因为上面代码中的odinput / odoutput指向一个整数数组。但不适用于多个维度。