Если вы хотите сохранить выделение двумерного массива,
new double [3][4]
есть два способа обратиться к этому фрагменту памяти: 1.,
double* pvalue = NULL;
pvalue = (double*)new double [3][4];
и 2.,
double (* parray)[4] = NULL;
parray = new double [3][4];
, если вы хотите сохранить переменную указатель-указатель, т. Е. double** ppvalue
, тогда
double** ppvalue = NULL;
ppvalue = new double*[3]; (a)
for(int i =0; i<3; i++)
ppvalue[i]=new double[4]; (b)
в основном вам нужно выделить память для массивауказателей (a), и заполните эти указатели конкретными адресами.
Код, который вы отправили
double** pvalue = NULL; // Pointer initialized with null
pvalue = new double [3][4]; // Allocate memory for a 3x4 array
, не работает, потому что нет способа вычесть смещение pvalue
хотя это выглядит очень красиво и понятно.
Я также вставляю полный код тестирования, чтобы вы могли сыграть:
#include <stdio.h>
int main() {
double* pvalue = NULL;
pvalue = (double*)new double [3][4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
*(pvalue+i*4+j) = (double)i*(double)j;
printf("%f\n", *(pvalue+i*4+j));
}
}
double (* parray)[4] = NULL;
parray = new double [3][4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
parray[i][j] = (double)i*(double)j;
printf("%f\n", parray[i][j]);
}
}
double** ppvalue = NULL;
ppvalue = new double*[3];
for(int i =0; i<3; i++)
ppvalue[i]=new double[4];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 4; j++) {
ppvalue[i][j] = (double)i*(double)j;
printf("%f\n", ppvalue[i][j]);
}
}
}