0

我正在使用 Visual Studio 2010 做一个小型 C++ Windows 窗体项目。我的代码变得太大,所以我决定在 header.h 文件中包含一些函数。我的问题是我不知道如何制作一个函数来接收/返回多维数组。任何帮助表示赞赏

4

1 回答 1

1

对于托管数组,您可以将维度指定为数组关键字的第二个模板参数:

void TakesArray(array<Object^, 2>^ a)
{
    ...
}

array<Object^, 2>^ ReturnsArray()
{
}

对于原始的非托管数组,它有点复杂。取一个数组如下所示:

void TakesArray(SomeType a[5][10])
{
}

但您需要注意,这实际上相当于:

void TakesArray(SomeType (*a)[10])
{
}

这意味着它确实需要一个指向 10 个元素的数组的指针。这也意味着第二个维度(以及更高维度,如果添加更多)的大小是类型的一部分,但第一个维度的大小不是,这反过来意味着您可以用二维来调用它数组,其第二维的大小必须为 10,并且其第一维可以是任意大小。

返回一个原始的非托管数组更奇怪:

void (*ReturnsArray())[10]
{
}

无论如何,很少需要使用这种语法(这就是它不常见的原因)。更好的方法是使用数组类,例如 std::vector:

void TakesArray(const vector<vector<SomeTipe>>& v)
{
}

vector<vector<SomeType>> ReturnsArray()
{
}

从技术上讲,这不是多维数组,而是数组数组,但您可以像使用多维数组一样使用它。

于 2013-02-15T05:18:44.987 回答