私はこの一日のまわりで私の頭をラップしようとしてきた時に与えられた大きさを取るために、固定の二次元配列を変更...ランタイム
は が、アイデアは私がこれまでに予定通りに動作しているコードです 私は変更する必要があります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];
」をどのように読み上げていますか?
注:
- これは私がコード
非常に重要な質問は、「以前のANSI標準によって、あるいはgccがあなたを取り除くことができるように、c99標準に準拠していますか?」*最初と最後のケースでは、可変サイズの配列を使用できますこれは比較的簡単です。 2番目のケースでは、不必要に厄介ないくつかのフープを飛び越さなければなりません。 – dmckee
配列をxとyのサイズにしたいですか? – SNpn
これはスタックオーバーフローで殴られてしまったと言われています。 – dmckee