2012-04-02 64 views
0

我是新來的指針/內存操作,並且正在處理一些示例程序。我想在C++中將二維數組分配到連續的內存塊中。我知道我必須創建一個2D數組大小的緩衝區。我寫了一小段代碼,它創建了緩衝區併爲2D數組賦值,但我不知道如何將數組值放入緩衝區。任何人都可以給我一個想法做什麼?我已經研究了一下,但根據我的理解,找不到解釋過程的任何內容。我知道向量可能是一個更好的選擇,但我希望在處理之前掌握數組操作。在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

'buffer [i * 3 + j] = dyn_array [i] [j]'? – 2012-04-02 22:19:42

回答

2

可以解決陣列大踏步,像buffer[i * 3 + j]。這裏j是快速索引,3j覆蓋的範圍的範圍。

您應該總是以這種扁平化的方式存儲矩形的多維數據,因爲這樣您將擁有一個連續的內存塊。

+0

謝謝你。這也適用於3D陣列嗎?另外,我將如何去檢索緩衝區中的特定數組元素?它是否與往常一樣即是。 ARR [1] [2] = 4;還是採取不同的形式? – adohertyd 2012-04-03 14:04:42

+0

它可以適用於任何維度。你可以編寫一個包裝訪問函數,但它必須是圓括號('operator()'),因爲方括號只能帶一個參數。 – 2012-04-03 14:54:48