2012-04-02 7 views
0

私はポインタ/メモリ操作を初めて利用していて、いくつかのサンプルプログラムで作業しています。私は2D配列をC++の連続したメモリブロックに割り当てたいと思っています。私は、2D配列のサイズを持つバッファを作成する必要があることを知っています。私はバッファを作成し、値を2次元配列に割り当てる小さなコードブロックを持っていますが、配列値をバッファに配置する方法はわかりません。誰も私に何をすべきかのアイデアを与えることができますか?私はそれをかなり研究しましたが、私が理解するところでプロセスを説明するものは何も見つかりません。私はベクトルがおそらくより良い選択肢であることを知っていますが、私はそれに移る前に配列操作について理解しています。C++で多次元配列にメモリブロックを割り当てる

ありがとうございます!

#include <cstdlib> 
#include <cstdio> 
#include <iostream> 
#include <ctime> 

using namespace std; 

int main() 
{ 
int dyn_array[5][3]; 
int i; 
int j; 

srand(time(NULL)); 

//Need to create a pointer to a block of memory to place the 2D array into 

int* buffer=new int[5*3]; //pointer to a new int array of designated size 

//Now need to assign each array element and send each element of the array into the buffer 

for(i=0;i<5;i++) 
{ 
    for(j=0;j<3;j++) 
    { 
    dyn_array[i][j]=rand()%40; 
    cout<<"dyn array ["<<i<<"]["<<j<<"] is: "<<dyn_array[i][j]<<endl; 
    } 
} 
return 0; 
} 
+0

バッファ[i * 3 + j] = dyn_array [i] [j] '? –

答えて

2

あなたはbuffer[i * 3 + j]のように、進歩で配列を扱うことができます。ここでjは高速インデックスであり、3jでカバーされる範囲の範囲です。

一般に、長方形の多次元データをこのようにフラットアウトした形で保存する必要があります。これは、連続した1つのメモリチャンクを持つためです。

+0

ありがとうございます。これは3D配列にも当てはまりますか?また、バッファから特定の配列要素を取り出す方法は?それは普通のものと同じですか? arr [1] [2] = 4;またはそれは別のフォームを取るか? – adohertyd

+0

任意の数のディメンションで機能します。ラッパーアクセス関数を記述することはできますが、大括弧では1つの引数しか取ることができないので、丸括弧( 'operator()')でなければなりません。 –

関連する問題