2012-04-02 4 views
0

Я новичок в указателях/операциях памяти и работаю над некоторыми примерами программ. Я хочу назначить 2D-массив в непрерывный блок памяти на 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]'? –

ответ

2

Вы можете обратиться массив в шагает, как buffer[i * 3 + j]. Здесь j - это быстрый индекс, а 3 - это диапазон охвата, охватываемый j.

Как правило, вы всегда должны хранить прямоугольные, многомерные данные в этом, сплющенном виде, потому что таким образом вы будете иметь один непрерывный кусок памяти.

+0

Спасибо за это. Это применимо и к 3D-массивам? Кроме того, как бы я хотел получить некоторые элементы массива из буфера? Это то же самое, что и обычно. обр [1] [2] = 4; или он принимает другую форму? – adohertyd

+0

Он будет работать для любого количества измерений. Вы можете написать функцию доступа к обертке, но она должна быть круглыми скобками ('operator()'), так как квадратные скобки могут принимать только один аргумент. –

Смежные вопросы