3

この質問はおそらく以前に尋ねられたことは知っていますが、この文脈では理解できません。

これが私が調べようとしているコードです。コメントします。どこが間違っているか教えてください

int **A;                    // declaring a pointer to a pointer

A = new int*[n];            // assigning that pointer to a newly-allocated 
                            // space (on the heap) for an array
                            // of [size n] of pointers to integers

for (i = 0; i < n; ++i)     // looping from 0 to n-1
    A[i] = new int[n];      // assigning each slot's pointer to a 
                            // new array of size n?

for (i = 0; i < n; ++i)     // loop through all the rows
    for (j = 0; j < n; ++j) // loop through each column for the current row
        A[i][j] = 0;        // assign the value to 0

どこが間違っているか教えてください。A = new int*[n];常識で理解しようとしているだけなので何もわかりませんが、困っています。

ありがとうございました!

4

3 に答える 3

2

したがって、基本的にここにあるのは、配列へのポインターの配列です。つまり、配列内の各ポインターが別の配列を指すポインターの配列があります。

これを説明するために見つけた写真を次に示します。 ここに画像の説明を入力

「[]」演算子を使用すると、インデックスを使用して配列内の要素にアクセスできます。したがって、 A[i] は A 配列の i の要素にアクセスしています。

 A[i] = new int[n];  

ここでは、配列内の i のポインターを作成して、新しい配列を指すようにします。

A[i][j]
つまり、A[i][j] では、A の i の要素が指す配列内の j の要素にアクセスしているということです。

于 2013-07-31T04:40:19.140 に答える
2

「配列」とは何ですか?これは、アドレスで表されるメモリのブロックです。

2 次元配列が必要な場合は、これらのブロックが多数必要になります。また、それぞれのブロックがどこにあるかを知る必要があります。つまり、アドレスの配列、つまりint*-- の配列が必要ですint**

つまり、アドレスの配列にメモリを割り当て、それぞれの内部に、を介して割り当てられた s の配列new int*[n]のアドレスを配置します。intnew int[n]

于 2013-07-31T04:27:21.333 に答える
2

あなたのコードとコメントは正しいです。ポインターに関する混乱を解消するには、次のようにします。

  • 2D 配列は、単に配列の配列です。
  • 配列が動的なサイズ (つまりn、コンパイル時に不明なサイズ) を持つことを可能にするために、ポインターの配列が作成されます。配列自体の各ポインターは、int の配列を指します。
  • 結果の構造は、配列の配列に非常に似ています。これは、配列へのポインターの配列です。int a[n][n];サイズがわからないため、たとえばコンパイル時にポインターを使用できないという理由だけで、ポインターがそこにあります。

これを図にすると、次のようになります。

> [       ]      //">" is a pointer, pointing at an array ([ ])


    [ ]  [ ]  [ ]
> [  ^    ^    ^ ]  // The array is an array of pointers "^", each of which points to an array
于 2013-07-31T04:28:10.200 に答える