1

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たが、まだうまくいきません。どうもありがとう!

4

2 に答える 2

1

まず、可変長配列 (VLA) は標準の C++ ではないことに注意してください。この行がコンパイルされるのは、GCC コンパイラ拡張によるものです。

bool myArray[size][size];

それは単に有効な C++ ではありません。配列の次元はコンパイル時の定数である必要がありますが、ここでは function に渡される引数を使用していますbuild

とにかく、VLA を関数に渡すには、コンパイラ拡張機能を引き続き使用する必要があります。ただし、私がテストした限り、これらは C としてコンパイルする場合にのみ機能します。最初のオプションは、他のパラメーター宣言でパラメーターを使用できるようにする拡張機能を使用します。

void modify(int mySize, bool array[][mySize]);

mySize2 番目のオプションを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);
}

これで、サイズを渡す必要さえなくなりました。

于 2013-03-10T11:35:42.233 に答える
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; 
    }
于 2013-03-10T11:59:30.233 に答える