0

値の整数配列があり、この配列を指すダブル ポインターを作成したいと考えています。この 1D 整数配列は、実際には 2D 配列を表していると思います。たとえば、 がある場合、int A[2000*12]12 行と 2000 行になります。問題は、配列 A を指すようにポインターを初期化する方法がわからないことです。私の最初の考えは次のようでした。

  int A[2000*12];
  int **ptr;
  ptr=&A[0];

もちろん、これは正しくありません。より正確には、次のエラーが発生します:代入で互換性のないポインター型

4

1 に答える 1

0

[0] の部分を削除します。

int A[2000*12];
int **ptr;
ptr = &A;

編集:ただし、これは2D配列の取得に関する問題を解決しません。あなたはまだそれのようにアクセスすることはできません

A[1][2] = 10;

コンパイラは行の長さを認識していないためです。

2D 配列を初期化する私のお気に入りの方法は次のようになります。

int width = 10;
int height = 20;
int *_a = (int *) malloc(width * height * sizeof(int));
int **a = (int **) malloc(height * sizeof(int *));

最初の割り当ては 2D 配列を作成し、2 番目の割り当ては各行を指す配列を作成します。

int i, offset = 0;
for (i = 0; i < height; i++, offset += width)
{
    a[i] = _a + offset;
}

a[0][0] = 1;
a[0][1] = 2;
a[1][0] = 2;
a[1][1] = 4;
// ...
于 2013-11-15T14:48:07.140 に答える