Я пытался обернуть голову вокруг этого весь день ...
Код, который у меня есть, работает так, как запланировано, идея в том, что мне придется изменить tCell * cells[3][5]
;взять размер, указанный во время выполнения.Какие изменения мне нужно внести, чтобы сохранить функциональность?
typedef struct {
int active;
} tCell;
typedef struct {
tCell * cells[3][5];
} tGrid;
// creates a grid and initialize all the cells to NULL
tGrid *init_grid()
{
tGrid *grid= malloc(sizeof(tGrid));
if(grid == NULL)
exit(127); // failed to malloc
int i, j;
for(i=0; i < 3; i++)
for(j=0; j < 5; j++)
grid->cells[i][j]= NULL;
return grid;
}
// adds a cell to the grid
void add_cell(tGrid *grid)
{
tCell cell;
int y = rand() % 4;
if(grid->cells[0][y] != NULL)
exit(127); // cell is taken
cell.active = 1;
grid->cells[0][y] = &cell;
}
void remove_cell(tGrid *grid, int x, int y)
{
if(x < 0 || x > 3 || y < 0 || y > 5)
exit(127); // out of bounds
grid->cells[x][y]= NULL;
}
В основном, init_grid
должен будет принять x
и y
в качестве параметров:
tGrid *init_grid(int x, int y);
Нотогда как я могу изменить определение структуры tGrid?Все, что я до сих пор пробовал, приводило к ошибке компилятора (например, tCell * cells[][];
)
В слегка связанной заметке, как вы читаете "tCell * cells[3][5];
" вне себя?
Примечание:
- это вопрос C
- Я использую gcc 4.1 для компиляции кода