Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
警告C4047:&x27;int**';间接层次不同于';int[2][4]';_C_Parameters_Indirection - Fatal编程技术网

警告C4047:&x27;int**';间接层次不同于';int[2][4]';

警告C4047:&x27;int**';间接层次不同于';int[2][4]';,c,parameters,indirection,C,Parameters,Indirection,我得到了这个警告,并对原因感到困惑。我在VS 2017编译器中发现了许多处理此警告的线程,但不是这个特定的组合:为什么int**的间接寻址级别与int[X][Y]不同 下面是一个生成警告的简化示例: void testfunc(int ** input, int ** output) { /* * Do something */ } int main() { int firstvar[2][4]; int secondvar[2][4]; testf

我得到了这个警告,并对原因感到困惑。我在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:“函数”:“int**”在间接寻址级别上与“int[2][4]不同

任何关于为什么会这样或如何解决它的想法都非常感谢

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指向一个整数数组。但不适用于多维。

int**
不是二维数组。不能使用这样的指针访问2D数组元素。数组不是指针。数组衰减为指针,但这并不意味着2D数组可以衰减为指向指针的指针。值得注意的是,实际传递的类型是
int(*input)[4]
感谢您的回复。但是,我没有将其作为int[][4]传递的原因是,实际维度是可变的。我认为我需要将其重新设计为一个一维结构,并传入第一个维度的大小,这样就可以将其作为rowsize*r+cYou访问,如果数据是二维的,则不必使用一维数组。只需使用可变大小的2d数组作为如下参数:
void testfunc(size\t n,size\t m,int-input[n][m],int-output[n][m])
并这样调用它:
testfunc(2,4,firstvar,secondvar)