C ++: выделение памяти рекурсивно? - PullRequest
0 голосов
/ 29 апреля 2018
double** ptr_d = new double*[2];
ptr_d[0] = new double[50];
ptr_d[1] = new double[50];

Что это на самом деле делает? Я немного смущен

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Что это на самом деле делает?

Первая строка создает массив из 2-х указателей для удвоения. Вторая и третья строки создают массив из 50 двойных чисел каждая и присваивают указатели 1-му элементу двум элементам массива указателей:

{double *, double *} //2 pointers to double
    |          |
    |          V
    |      {double1, double2, ...double50} //50 doubles
    |
    V 
{double1, double2, ...double50} //50 doubles
0 голосов
/ 29 апреля 2018

Первая строка выделяет массив указателей для 2 double переменных. Следующие 2 строки заполняют 2 слота массива. Было бы легче понять, если бы у него было лучшее название:

double** temperatureValues = new double* [ 2 ];
temperatureValues [ 0 ] = new double [ 50 ];
temperatureValues [ 1 ] = new double [ 50 ];

Или что-то в этом роде.

Вы можете думать об этом как о двумерном массиве значений 2 x 50. Для доступа к одному из значений вы можете сделать:

double nextTemp = temperatureValues [ 0 ][ 32 ];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...