Может ли кто-нибудь объяснить мне этот кусок кода?

«header» — это объект структуры, и вы можете считать, что header.img имеет значение 496. И структура заголовка имеет 3 целочисленных элемента, поэтому значение равно 12 байтам. (Учитывая 4 байта в int)

double** MatrixBuffers = new double* [header.img];
MatrixBuffers[0] = new double[header.img* 12];
for (unsigned int i=1; i<header.img; ++i) {
MatrixBuffers[i] = MatrixBuffers[0] + i * 12;
}
globaldata.adv_MatrixBuffers = MatrixBuffers;

Я понимаю, что MatrixBuffers — это указатель на 496 дублей. Но я не понимаю, что происходит во второй строке.

MatrixBuffers[0] = new double[header.img* 12];

1. Означает ли это, что MatrixBuffers [0] является указателем на 496 * 12 double?
2. Что происходит в цикле for?
3. Позже в коде MatrixBuffer [0] передается функции. Означает ли это, что я передаю указатель, являющийся базовым адресом, в MatrixBuffers [0]?

0

Решение

Для двойного указателя вы должны выделить память как для первого, так и для второго измерения.

Для второго уровня вместо выделения памяти для каждого измерения он выделяет память одним выстрелом

MatrixBuffers[0] = new double[header.img* 12];

Внутри цикла for они перемещают адрес и присваивают его каждому индексу.

Вместо этого он также может сделать это внутри цикла for и прокомментировать строку над циклом for.

MatrixBuffers[i] = new double[header.img];
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]