2015-01-15 4 views
0

Я совершенно новичок в программировании и у меня есть вопрос в следующем коде речь идет о создании динамического многомерного массива я не понимаю причину р то, что функция его здесьсоздания динамических многомерных массивов

#include <iostream> 
using namespace std; 

void print2DArr(int** arp,int *ss,int nrows) 
{ 
    for(int i=0;i<nrows;i++){ 
     for(int j=0;j<ss[i];j++){ 
      cout << arp[i][j] <<" "; 
     } 
     cout << endl; 
    } 
} 

void main() 
{ 
    int count; 
    cout << "How many arrays you have?\n"; 
    cin >> count; 
    int **arrs = new int*[count]; 
    int *sizes = new int[count]; 
    //int *arrs[3];//static array of pointers 
    for(int i=0;i<count;i++) 
    { 
     int size; 
     cout << "Enter size of array " << (i+1) << endl; 
     cin >> size; 
     sizes[i]=size; 
     int *p = new int[size]; 
     arrs[i] = p; 
     //arrs[i] = new int[size]; 
     cout << "Enter " << size << " values\n"; 
     for(int j=0;j<size;j++) 
      //cin >> p[j]; 
      cin >> arrs[i][j]; 
    } 

    print2DArr(arrs,sizes,count); 

    //delete (dynamic de-allocation) 
    for(int i=0;i<count;i++) 
     delete[] arrs[i]; 
    delete[] arrs; 


} 
+0

Точность начальной строки в программе не может быть более точным. Поддержки для этого. Как только вы получите ручку на этом, похлопайте себя по спине, тогда реализация 'std :: vector <>' будет логичным выбором для реализации этого с современным C++. – WhozCraig

ответ

3

Это переменная, которая не делает много. Вы можете заменить строки

int *p = new int[size]; 
    arrs[i] = p; 

с

arrs[i] = new int[size]; 

без каких-либо проблем.

0

Вы создаете массив int с динамическим размером в цикле for. p указывает на этот вновь созданный массив int. Затем вы можете назначить p (адрес вашего нового массива int) в i-ю позицию вашего массива указателей на int array (вот что делает следующий оператор: arrs[i]=p).

Поэтому ваша структура выглядит следующим образом:

ARRS (массив указателей Int массивов):
- arrs0: указывает на целочисленный массив 1 по адресу 4711
- arrs1: указывает на целочисленный массив 2 на адреса 9876

размеры (массив INT в) - холдинговая размеры ИНТ массивов
- 0 (не массиве указателей на массивы Int!): 2
- 1: 3

целочисленный массив 1 (адр 4711)
- 0: 17
- 1: 23

целочисленный массив 2 (адр 9876)

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