0

しばらくの間インターネットを見てきましたが、それを機能させるための明確な答えが得られないようです。コンソールを使用して C++ で簡単な倉庫番ゲームを作成しています。

まず第一に、配列が大きな配列である場合、メモリ集約度が高いため、配列を関数に渡すことはお勧めできません。私は最大約 32x41 しか持っておらず、最大値に到達するつもりもないので、それは問題ではありません。では、配列全体を渡す必要がありますか、それともポインターを渡す必要がありますか?

第二に、私の配列サイズは常に同じではありません。これが重要な要素であるかどうかはわかりません。

第三に、ポインターを渡す場合、ポインターを操作する前に作成/初期化する方法を教えてください。私の配列は次の方法で作成されました:

string line;
string arr[30];
int i = 0;
char mazeArr[30][40];
int k, count;

if (mazeStream.is_open())
{
  while ( mazeStream.good() && !mazeStream.eof() )
  {
      getline (mazeStream,line);
      cout << line << endl;
      arr[i] = line;
      i++;
  }
  mazeStream.close();
  cout << endl;
}

else cout << "Unable to open file"; 

for ( count = 0; count < 12; count ++)
{
    string::const_iterator iterator1 = arr[count].begin();
     k = 0;

    while (iterator1 != arr[count].end())
    {
        mazeArr[count][k] = *iterator1;
        iterator1++;
        k++;
    }
}

この2D配列でやりたいことは次のとおりです。

  • 配列内のシンボルに応じて、一度に 1 つの要素を取り、クラスのインスタンスを作成します
  • インスタンスをその型をとる別の配列に配置します

したがって、最終的にインスタンスの 2 番目の配列が作成されます。各インスタンスは、最初の配列から取得したシンボルに依存します。同じ「座標」を保持しながら

どんな助けでも大歓迎です、

ありがとう

4

1 に答える 1

0

私はこれに沿って何かをします:

char **createMaze(width, height)
{
    // Dynamically allocate memory creating a pointer array of pointers
    char **maze = new char*[width];

    // Loop to allocate memory for each pointer array
    for(int i = 0; i < width; i++)
        maze[i] = new char[height];

    return maze;
}

int main()
{
    width = 40;
    height = 30;
    char **maze = createMaze(40, 30);

    // You can now access elements from maze just like a normal
    // 2D array   maze[23][12]   - You can also pass this into
    // a function as an arugment      

    return 0;
}

このコードはテストされていません..ブラウザXDで書いたからです。

于 2012-06-14T01:54:04.480 に答える