まず、可変長配列 (VLA) は標準の C++ ではないことに注意してください。この行がコンパイルされるのは、GCC コンパイラ拡張によるものです。
bool myArray[size][size];
それは単に有効な C++ ではありません。配列の次元はコンパイル時の定数である必要がありますが、ここでは function に渡される引数を使用していますbuild
。
とにかく、VLA を関数に渡すには、コンパイラ拡張機能を引き続き使用する必要があります。ただし、私がテストした限り、これらは C としてコンパイルする場合にのみ機能します。最初のオプションは、他のパラメーター宣言でパラメーターを使用できるようにする拡張機能を使用します。
void modify(int mySize, bool array[][mySize]);
mySize
2 番目のオプションを2 番目の引数にしたい場合は、パラメーターの前方宣言を可能にするコンパイラ拡張機能も使用します。
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);
}
これで、サイズを渡す必要さえなくなりました。