0

「ヘッダー」は構造体のオブジェクトであり、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 double へのポインターであることを理解しています。しかし、2行目で何が起こっているのかわかりません。

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

1.これは、MatrixBuffers[0] が 496*12 double へのポインターであることを意味しますか? 2. for ループで何が起きているのか? 3. コードの後半で、MatrixBuffer[0] が関数に渡されます。これは、ベース アドレスであるポインターを MatrixBuffers[0] に渡しているということですか?

4

1 に答える 1

0

ダブルポインターの場合、最初の次元と2番目の次元にメモリを割り当てる必要があります。

第 2 レベルでは、次元ごとにメモリを割り当てるのではなく、一度にメモリを割り当てます。

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

for ループ内でアドレスを移動し、同じものをすべてのインデックスに割り当てます。

代わりに、for ループ内でこのようにして、for ループの上の行にコメントを付けることもできます。

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