Первая строка выделяет массив указателей для 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 ];