void build()
将创建一个2D数组,其大小在运行时确定,并通过引用传递给modify()
。
void modify()
将对数组进行一些更改。
.h文件:
void modify(______, int mySize);
void build(int size);
在.cpp文件中:
void modify(______, int mySize) {
for (int i = 0; i < mySize; i++)
for (int j = 0; j < mySize; j++)
myArray[i][j] = false;
}
void build(int size) {
bool myArray[size][size];
modify(______, size);
}
有人能告诉我这些空白的内容吗?我尝试了许多方式来施放myArray
但仍然无效。非常感谢你!
答案 0 :(得分:1)
首先,请注意,可变长度数组(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
。
您应该使用的是标准容器。 std::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);
}
现在你甚至不必传递大小。
答案 1 :(得分:0)
以这种方式使用:
void modify(bool**& myArray, const int mySize)
{
for (int i = 0; i < mySize; i++)
for (int j = 0; j < mySize; j++)
myArray[i][j] = false;
}
void build(const int size)
{
// create the array
bool** myArray = new bool*[size];
for (int i=0; i<size; i++)
myArray[i] = new bool[size];
modify(myArray, size);
// release the array
for (int i=0; i<size; i++)
delete[] myArray[i];
delete[] myArray;
}