2010-08-26 77 views
3

我目前正在讀一些C++源代碼,我碰到這個傳來:什麼是**在C++

double **out; 
// ... lots of code here 

// allocate memory for out 
out = new double*[num]; 

不能完全確定它做什麼,或者什麼意思。它是一個指向另一個指針的指針嗎?

還有以下幾點:

double ***weight; 

// allocate memory for weight 
weight = new double**[numl]; 

我很困惑:P,任何幫助表示讚賞。

+2

您應該使用帖子編輯器的代碼格式化功能,使帖子更具可讀性 – sum1stolemyname 2010-08-26 06:44:27

回答

8

new double*[num]是雙指針的數組,即陣列中的每個元素是一個double*。您可以使用out[i] = new double;爲每個元素分配內存。類似地,weightdouble**的數組。可以分配的內存使用new double*[num]每個配重元件(如果它被認爲是的double*數組)

+0

感謝您的幫助 – dcousens 2010-08-26 06:50:25

+3

+1,最佳答案。然而,單獨分配每個'double'可能不是一個好主意,特別是對於科學應用。最好分配一個雙精度平面數組,並讓所有指針指向該數組的元素。 – Potatoswatter 2010-08-26 07:00:00

2

這是一個指向double的指針。或者指向數組的指針。或者如果每個指針本身分配數組,它可能是一個矩陣。

out = new double*[num]; // array of pointers 

現在depents如果out[0]分配是這樣的:

out[0] = new double; // one double 

或這樣的:

out[0] = new double[num]; // now you've got a matrix 
1

實際上,寫

double*[] out; 

是在C/C++等於

double** out; 

它意味着一個指向double的指針數組。或者是一個指向double的指針。因爲數組不過是一個指針而已。所以這實質上是一個二維數組。

你可能也寫

double[][] out; 

同樣地,增加另一個指針水平,將另一個維度添加到您的陣列。 所以

double ***weight; 

實際上是一個指向三維數組的指針。

+2

編號'double * [] out;'是語法錯誤。 'double * out [];'會聲明一個'double *'的數組,而不是一個指針。數組和指針是不同的類型;例如,你不能分配給一個數組,所以'out = new double * [num];'將是無效的。 – 2010-08-26 09:03:35

1

基本上你的代碼片段都分配了指針數組。對於分配它並不重要。正確的聲明僅用於類型檢查。方塊應該分開讀取,只意味着它是數組。

考慮下面的代碼爲簡單的例子:

#include <stdio.h> 

int main() 
{ 
    unsigned num = 10; 
    double **p1, ***p2; 

    p1 = new double*[num]; 
    p2 = new double**[num]; 

    printf("%d\n", sizeof(p1)); 
    printf("%d\n", sizeof(p2)); 

    delete [] p1; 
    delete [] p2; 

    return 0; 
} 

是,兩者都只是指針。並且分配的內存是sizeof(double *)* num。