无法将'int (*)[size]'转换为'int **'

10

我有一个256x256的二维浮点数组,我试图将其传递给函数,但是g++给我的错误信息是:无法将'int (*) [256]'转换为'int **'。 我该如何解决这个问题?

void haar2D(int** imgArr);

int imageArray[256][256];
haar2D(imageArray);

我尝试将函数参数更改为类型int[256][256]int*[256],但没有成功。

你尝试过将函数参数类型更改为 std::vector<std::vector<int>> &imgArr 吗? - Fantastic Mr Fox
我以前没有使用过向量,如果可能的话,我想使用二维数组。我已经使用行列(例如imagearray[i][j])符号编写了函数体,这可以与向量一起使用吗? - Bobazonski
1
你可以参考这个链接,它是关于C语言的。你可以使用引用代替指针,并且可能还可以使用模板来表示数组大小。下次搜索时祝你好运。 - LogicStuff
https://dev59.com/9moy5IYBdhLWcg3wHaXt - VladimirS
想一想像 void haar2D(int** imgArr); 这样的函数如何确定它所传递的数组的维度,你就会开始理解为什么数组维度很重要。因为二维数组在物理上与使用指向指针的数据引用不同。在后一种情况下,需要额外的数据来确定所引用的数据的大小。 - Andrew Henle
1
去白板上写100遍“数组不是指针”。 - Pete Becker
2个回答

9

函数参数必须像编译器提示的那样声明。

因此,请使用下列方式声明它:

void haar2D( int imgArr[256][256] );

或者

void haar2D( int imgArr[][256] );

或者像这样。
void haar2D( int ( *imgArr )[256] );

请注意,声明为数组的参数将被调整为指向它们的元素的指针。

或者您可以将参数声明为数组的引用。

void haar2D( int ( & imgArr )[256][256] );

4

如果您不想改变函数。

void haar2D(int** imgArr);

您可以尝试更改imageArray。

int **imageArray=new int*[256];
for (int i = 0; i < 256; ++i)
{
    imageArray[i] = new int[256];
}

那么

haar2D(imageArray);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接