首先,请注意可变长度数组 (VLA) 不是标准 C++。这一行编译的事实是由于 GCC 编译器扩展:
bool myArray[size][size];
它根本不是有效的 C++。数组的维度需要是编译时常量,但在这里您使用的是传递给函数的参数build
。
无论如何,要将 VLA 传递给函数,您必须继续使用编译器扩展。但是,据我测试,这些仅在编译为 C 时有效。第一个选项使用允许在其他参数声明中使用参数的扩展:
void modify(int mySize, bool array[][mySize]);
第二个选项,如果你想mySize
成为第二个参数,也使用允许参数前向声明的编译器扩展:
void modify(int mySize; bool array[][mySize], int mySize);
这int mySize;
是一个参数前向声明。
尽管如此,您确实不应该使用可变长度数组。您可以动态分配可变长度的数组,如下所示:
void modify(bool** array, int mySize);
void build(int size) {
bool** myArray = new bool*[size];
for (int i = 0; i < size; i++) {
myArray[i] = new bool[size];
}
modify(myArray, size);
}
但是,这仍然不是 C++ 中的推荐做法。你应该避免动态分配,除非你真的需要它,当你确实需要它时,你应该以某种方式管理它。在这里,您需要记住delete[]
每个元素myArray
及其 myArray
本身。
您真正应该使用的是标准容器。Astd::vector<std::vector<bool>>
在这里很适合你:
void modify(std::vector<std::vector<bool>>& array);
void build(int size) {
std::vector<std::vector<bool>> myArray(size, std::vector<bool>(size));
modify(myArray);
}
现在您甚至不必传递大小。