“header”是结构的对象,您可以认为header.img的值为496.而header struct有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]的基地址?
答案 0 :(得分:0)
对于双指针,您必须为第一维和第二维分配内存。
对于第二级而不是为每个维度分配内存,他一次性分配内存
MatrixBuffers[0] = new double[header.img* 12];
在for循环中,他们移动地址并为每个索引分配相同的地址。
相反,他也可以在for循环中执行此操作并注释for循环上方的行
MatrixBuffers[i] = new double[header.img];