2012-04-02 13 views
0

Ich bin neu in Pointer/Speicheroperationen und arbeite an einigen Beispielprogrammen. Ich möchte ein 2D-Array in einem zusammenhängenden Speicherblock in C++ zuweisen. Ich weiß, ich muss einen Puffer mit der Größe des 2D-Arrays erstellen. Ich habe einen kleinen Block von Code, den ich geschrieben habe, der den Puffer erstellt und einem 2D-Array Werte zuweist, aber ich weiß nicht, wie man die Array-Werte in den Puffer legt. Kann mir jemand eine Idee geben, was ich tun soll? Ich habe es ziemlich gründlich recherchiert, kann aber nichts finden, was den Prozess so erklärt, wie ich es verstehe. Ich weiß, dass Vektoren wahrscheinlich eine bessere Option sind, aber ich möchte mich mit Array-Operationen vertraut machen, bevor ich darauf eingehe.Zuweisen eines Speicherblocks zu einem mehrdimensionalen Array in C++

Danke!

#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

'Puffer [i * 3 + j] = dyn_array [i] [j]'? –

Antwort

2

Sie können das Array in Adresse schreitet, wie buffer[i * 3 + j]. Hier ist j der schnelle Index und 3 ist der Umfang des von j abgedeckten Bereichs.

Sie sollten im Allgemeinen immer rechteckige, mehrdimensionale Daten in dieser abgeflachten Form speichern, da Sie auf diese Weise einen zusammenhängenden Speicherbereich erhalten.

+0

Danke dafür. Gilt dies auch für 3D-Arrays? Wie würde ich darüber hinaus bestimmte Array-Elemente aus dem Puffer abrufen? Ist es das gleiche wie üblich? arr [1] [2] = 4; oder nimmt es eine andere Form an? – adohertyd

+0

Es funktioniert für eine beliebige Anzahl von Dimensionen. Sie können eine Wrapper-Zugriffsfunktion schreiben, aber es müssen runde Klammern ('operator()') sein, da die eckigen Klammern nur ein einzelnes Argument annehmen können. –

Verwandte Themen