2014-01-22 188 views
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雙打的指針。但我不明白第二行發生了什麼。

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

1.這是否意味着MatrixBuffers [0]是指向496 * 12雙打的指針? 2. for循環中發生了什麼? 3.在代碼後面,將MatrixBuffer [0]傳遞給函數。這是否意味着我傳遞了一個指向MatrixBuffers [0]的基址的指針?

回答

0

對於雙指針,你必須爲第一維和第二維分配內存。

對於第二級,而不是爲每一維分配內存,他分配內存在一個拍攝

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

在for循環它們移動地址和分配相同的每一個指標。

相反,他還可以像這裏面的for循環和評論上面的線環

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

對不起,我沒有聽明白。讓我備份一下。 假設MatrixBuffers是一個指向496雙打的指針,說P [0] ---- P [495]。當執行此操作時, MatrixBuffers [0] = new double [header.img * 12]; MatrixBuffers [0]指向496 * 12雙打的指針嗎?說K [0] --- K [47520]。 我的理解是P [0]指向K [0]。 和在for循環中寫下面的代碼和註釋上面的代碼一樣嗎? MatrixBuffers [i] = new Double [12]; 感謝您的幫助!謝謝 –

+0

是的...對於我們分配或分配12字節內存的每個索引。正如我所解釋的,您可以分配一次並將其分配給不同的索引,也可以分配給每個索引。 – Raghuram

+0

因此,在給定的代碼中: MatrixBuffers [0]的內存爲496 * 12雙打。 和MatrixBuffers [1到495]將有12個字節的內存? –

相關問題