-1

我有一个指向 Block 对象的指针的二维数组

Block* grid[GRID_COLUMNS][GRID_ROWS];
for (int i=0; i>GRID_COLUMNS; i++)
{
    for (int k=0; k>GRID_ROWS; k++)
    {
        grid[i][k] = NULL;
    }
}

如何创建指向网格的指针?

??? // create pointer to grid here

myBlock.ShiftDown(???); // pass pointer to grid to the function

myBlock.ShiftDown 的函数定义。我应该用什么代替??? 使这项工作?

void Block::ShiftDown(???)
{
    if (row == GRID_ROWS)
        ???grid[column][row] = this;
    else
        row++;
}

编辑:我在这里要做的是让 Block::ShiftDown 操纵网格。如果有更简单的方法可以做到这一点,那么我想听听。

4

3 回答 3

0

有什么问题:

void Block::ShiftDown(Block* g[GRID_COLUMNS][GRID_ROWS])
{
    if (row == GRID_ROWS)
        g[column][row] = this;
    else
        row++;
}

并称之为:

myBlock.ShiftDown(grid);
于 2013-04-25T13:30:20.303 回答
0

假设您使用的是 C/C++,则数组本身的名称是指向数组第一个元素的指针。因此,在您的情况下,网格本身就是指向数组第一行第一列的指针

于 2013-04-25T13:32:19.010 回答
0

如何创建类型别名:

using my_array_type =
    std::array<std::array<std::shared_ptr<Block>, GRID_ROWS>, GRID_COLUMNS>;

现在您可以使用my_array来声明类型:

my_array_type grid;

当然使用该类型来声明函数参数:

void Block::ShiftDown(my_array_type& grid);

如果你没有 C++11 编译器,所以没有std::array也不能using用来创建类型别名,那么就有了旧的typedef

typedef Block *my_array_type[GRID_COLUMNS][GRID_ROWS];
于 2013-04-25T13:33:24.863 回答