你如何在函数原型中编写二维数组?

时间:2013-07-31 03:44:49

标签: c++ visual-c++

此: void displayBoard(char [] []); (这是一个函数原型)

显示错误:“可能没有此类型的元素”。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

如果不为每个维度提供元素数量,则不能将多维数组作为参数。根据管理电路板数据的方式,您可以选择一些选项。

如果数组大小是动态的,您可以使用std::vector

void displayBoard(std::vector<std::vector<int>>& board);

如果阵列大小是固定的,并且您提前知道大小,则可以在参数中包含大小或使用std::array

// Fixed size, naked array
void displayBoard(int (&board)[100][100]);

// Fixed size using std::array
void displayBoard(std::array<std::array<int, 100>, 100>& board);

如果传递给函数的数组大小固定,但想要传递不同大小的数组,则可以使用模板。

// Fixed size, naked array
template<size_t Columns, size_t Rows>
void displayBoard(int (&board)[Rows][Columns]);

// Fixed size using std::array
template<size_t Columns, size_t Rows>
void displayBoard(std::array<std::array<int, Columns>, Rows>& board);

在所有情况下,我建议您通过引用传递它们以避免不必要的副本。

答案 1 :(得分:0)

这不起作用,因为函数displayBoard没有关于数组维度大小的任何信息。

您最好的选择是使用std::vector - 您可以嵌套矢量以获取多维度,并且它们会在其中包含有关其大小的信息。

例如,

std::vector<std::vector<int>> blah; // two-dimensional vector of ints
displayBoard(blah);

void displayBoard(const std::vector<std::vector<int>>& board)
{
    // do something with the board
}

答案 2 :(得分:0)

在声明语句中,只有数组的最后一个维度可以为空,如:

int a[]; int b[5][]; int c[3][4][];

因此,如果您需要这样做,请考虑“主要”原型:

int main(int argc, char *argv[]);

将声明中的其他维度更改为*。

相关问题