4

Cで2次元配列を作成したいと思います。

たとえば、次のようなplaceという名前のint型変数を作成します。

int *place;

行や列などの変数を持つゲームがあります。place変数を2次元配列にし、その行と列を動的に割り当てます(配列の最大サイズに対して)。これは、「通常の」宣言では次のようになります。

place[rows][columns];

しかし、動的割り当てでそれを行う方法がわかりません。

1次元配列の場合は次のようにします。

place = (int*) malloc (levels * sizeof(int));

しかし、2D配列でこれを行う方法がわかりません。

編集:

これをintではなくcharに書き換えるにはどうすればよいですか?

intをcharsで上書きしようとしましたが、機能しません。

4

3 に答える 3

10

placeを配列へのポインタにします。

int (*place)[columns] = malloc(rows * sizeof *place);

これにより、簡単にアクセスできる連続したメモリブロック(局所性に適しています)が得られます

place[i][j] = whatever;
于 2012-12-01T11:38:57.290 に答える
0

いくつかのスマートインデックスによって、単一の 1 次元配列を 2 次元配列として使用できます。

メモリを割り当てます:

place = (int*) malloc(rows * columns * sizeof(int));

にアクセスするplace[i][j]には、 i と j を次のように使用します。

place[ i*columns + j] = value ;
于 2012-12-01T11:44:50.853 に答える
0

int 型の arr[x][y] を動的に割り当てるには、次の手順を実行する必要があります。

 int i = 0;
 int **arr = (int**)calloc(x, sizeof(int*));
 for(i = 0; i < x; i++)
      arr[i] = (int *) calloc(y, sizeof(int));

アイデアは、最初にポインターの 1 次元配列を作成し、次に各配列エントリに対して別の 1 次元配列を作成することです。

于 2012-12-01T11:42:37.590 に答える