警告C4047:&x27;int**';间接层次不同于';int[2][4]';
我得到了这个警告,并对原因感到困惑。我在VS 2017编译器中发现了许多处理此警告的线程,但不是这个特定的组合:为什么int**的间接寻址级别与int[X][Y]不同 下面是一个生成警告的简化示例:警告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
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)代码>