2013-04-25 61 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]; 
相關問題