2013-04-25 60 views
-1

数组我有一个指针的二维数组来遮挡物体如何创建一个指向对象的指针

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操纵网格。如果有更简单的方法来做到这一点,那么我想听听它。

+0

你的'ShiftDown'函数写入数组边界之外。 – interjay 2013-04-25 13:30:58

回答

0

什么问题用:

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

并调用它:假设您使用C

myBlock.ShiftDown(grid); 
+0

不是你不在这里传递数组。 'g'是一个指针,仅此而已。 'grid' _decays)写入指针。 – Elazar 2013-04-25 13:32:04

+0

谢谢,作为初学者,我没有意识到这很容易。 – 2013-04-25 13:48:48

0

/C++阵列本身的名称是一个指向的所述第一元件阵列。所以你的情况电网是本身的一个指针数组的第一行的第一列

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]; 
相关问题