试图使用多维数组指针

时间:2016-06-30 10:21:10

标签: c++ pointers multidimensional-array

我正在寻找解决方案,但我没有错误地使用任何解决方案。 我试图在控制台中绘制一个地图,使用多维数组。我希望有更多的地图,但我不能没有垃圾邮件无用的代码。这是地图:

char map2[11][15] = {
"###^######^###",
"#L           #",
"^S           #",
"#S           #",
"#    K       #",
"###########  #",
"#G           #",
"#       #### #",
"#       #M   #",
"# @     #    #",
"## ########^##"};

这是移动脚本:

void Game::showing_different_maps()
{
    differentmap= true;
    while (differentmap)
    {
        system("cls");
        for(int i = 0; i < 81; i++)  // i < map2[y][]
        {
            cout << somemap[i] << endl; // drawing a map !THIS CAUSES CRASH!
        }
    system("pause>nul"); // this line prevent lagging somehow

        if(GetAsyncKeyState(VK_UP))  // arrows to move on axis (y, x)
        {
            mapka.move(-1, 0);                    
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            mapka.move(1, 0);
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {
            mapka.move(0, 1);
        }
        if(GetAsyncKeyState(VK_LEFT))
        {
            mapka.move(0, -1);
        }

    }

}

这是我在互联网上可以找到的。

  Wut wut(3, 13);
  Maps *wsk;
  pointer = &wut;

  char (*somemap)[81] = new char[81][81];
  somemap= &map2[81];

  pointer = &wut;
  pointer -> get_in_area();

我想要做的是:在代码的某些部分,我希望指针是map2。我设法制作指针&#34;指针&#34;在类Maps中显示void get_in_area(),但是当我想在第二个代码示例中使用somemap指针绘制地图时,Console崩溃了。它工作,而不是somemap [i]我把map2 [i]。对不起,如果我错过了什么,我是初学者,英语不是我的第一语言。 我使用本教程制作了这个脚本:https://www.youtube.com/watch?v=7gpH7bOS350

2 个答案:

答案 0 :(得分:1)

这是你如何创建一个二维数组:

typedef int T;
void f()
{

    T ** map = new T*[10];

    for (int i = 0; i < 10; i++)
    {
        map[i] = new T[10];
    }

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            map[i][j] = i*j;
        }
    }

    for (int i = 0; i < 10; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            std::cout << map[i][j] << "\t";
        }
        std::cout << std::endl;
    }
}

这将输出一个通用乘法表。

如果您想要更多尺寸,您只需在创作中添加一个步骤:

T*** map = new T**[10];

for (int i = 0; i < 10; i++)
{
    map[i] = new T*[10];
}
...

答案 1 :(得分:0)

您应该学习如何传递参数而不是使用全局(map2)或静态(81)变量。如果您声明:

void Game::showing_different_maps(int n, int m, char map[n][m])
{
 String   differentmap= true;
    while (differentmap)
    {
        system("cls");
        for(int i = 0; i < n; i++)  // i < map2[y][]
        {
            cout << somemap[i] << endl; // drawing a map !THIS CAUSES CRASH!
        }

你不应再崩溃......

但无论如何,对于这种用法,我会使用一个指向指针而不是二维数组的指针:

char *map2[]= {
  "###^######^###",
  "#L           #",
  "^S           #",
  "#S           #",
  "#    K       #",
  "###########  #",
  "#G           #",
  "#       #### #",
  "#       #M   #",
  "# @     #    #",
  "## ########^##"};

然后

void Game::showing_different_maps(int n, char **map)