2013-04-25 2 views
-1

의 배열에 대한 포인터를 만들어 그리드에 대한 포인터를 만들려면 어떻게해야합니까어떻게 내가 블록에 대한 포인터의 2 차원 배열을 객체 포인터

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의 함수 정의입니다. 나는 무엇 대신에 넣어야합니까 ??? 이 일을하기 위해서?

편집 : 여기서 내가하려는 것은 Block :: ShiftDown이 그리드를 조작하도록하는 것입니다. 이 작업을 수행하는 더 쉬운 방법이 있다면 나는 그것에 대해 듣고 싶습니다.

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

과 전화 : 문제와 무엇

+0

귀하의'ShiftDown' 함수는 배열 범위 바깥쪽에 씁니다. – interjay

답변

0

myBlock.ShiftDown(grid); 
+0

여기에 배열을 전달하지 않는 것은 아닙니다. 'g'는 포인터입니다. 'grid' _decays)를 포인터로 변환합니다. – Elazar

+0

감사합니다. 초심자로서 나는 이것이 쉽지 않다는 것을 깨닫지 못했습니다. –

0

당신은 C를 사용하는 가정은/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]; 
관련 문제