2017-11-16 15 views
0

このコードを理解しようとしています。私にとって混乱している最初のことは、2行目のコードでは配列の配列を作成していると考えており、そのポインタは配列を指すことになっているということです。2次元配列で作業しているときに列を循環する行を循環する行

私はコンピュータが気にしないことは知っていますが、私にとってポインタの配列を水平にしておき、各配列をその水平線の点から降ろすことができます。

だから、 "dynamicArray = new int * [COLUMNS];"代わりに?

int **dynamicArray = 0; 

//行の要素に割り当てられたメモリ。

dynamicArray = new int *[ROWS] ; 

//各列の要素に割り当てられたメモリ。

for(int i = 0 ; i < ROWS ; i++) 
dynamicArray[i] = new int[COLUMNS]; 

//割り当てられたメモリ

for(int i = 0 ; i < ROWS ; i++) 
delete [] dynamicArray[i] ; 
delete [] dynamicArray ; 

EDIT解放:私はこれ以上について考え、私はたくさんの上につまずい取得しています事は、私が行と列を考えるということですが間違った道。
dynamicArray =新しいint * [ROWS];
私はこれがポインタの配列であると理解し、各ポインタはカラムを指しています。各列の要素数は行数になります(列は2D配列の各行に1つの垂直要素を持ちます)。 私はこの権利を理解していますか?
2D配列を初期化するためにネストされたforループを使用する必要があるときに、多くの問題が発生します。

答えて

1

行/列は対称/互換性があり、あなたが言うように、「コンピュータは気にしません」。あなたは「ポインタの配列を水平にしておき、各配列をその水平線の点から降下させるのが最も論理的だと思います。なぜですか?

私は他の方法と思います。私は水平オブジェクト(行の文字の配列など)を書いて、行/行は上から下に(つまり、配列の配列など)水平なオブジェクトの行を「視覚化する」方がはるかに簡単です。私はコードがあなたの提案よりも(私にとって)より自然だと思う。

ポイントは、我々はすべて異なっていると思うし、終わりには、ROWS/COLUMNSはX/Y、V/H、W/Hなどのように簡単に書くことができる変数です。

関連する問題