如何创建指向对象指针数组的指针

时间:2013-04-25 13:26:38

标签: c++

我有一个指向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操纵网格。如果有更简单的方法,那么我想听听它。

3 个答案:

答案 0 :(得分:0)

有什么问题:

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

并称之为:

myBlock.ShiftDown(grid);

答案 1 :(得分:0)

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

答案 2 :(得分: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来创建类型别名,那么就有旧的{{1 }}:

typedef