0

“header”是一个结构的对象,你可以认为 header.img 的值为 496。header 结构有 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 双精度数的指针?2.for循环发生了什么?3.稍后在代码中,MatrixBuffer[0] 被传递给一个函数。这是否意味着我将一个指针作为基地址传递给 MatrixBuffers[0] ?

4

1 回答 1

0

对于双指针,您必须为第一维和第二维分配内存。

对于第二级,他不是为每个维度分配内存,而是一次性分配内存

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

在 for 循环中,它们移动地址并将相同的地址分配给每个索引。

相反,他也可以在 for 循环中这样做,并在 for 循环上方注释行

MatrixBuffers[i] = new double[header.img]; 
于 2014-01-22T04:02:29.887 回答