什么是C ++中的**

时间:2010-08-26 06:42:52

标签: c++ c pointers memory

我目前正在阅读一些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,任何帮助都表示赞赏。

4 个答案:

答案 0 :(得分:8)

new double*[num]是一个双指针数组,即数组的每个元素都是double*。您可以使用out[i] = new double;为每个元素分配内存。同样weightdouble**的数组。您可以使用new double*[num]为每个权重元素分配内存(如果它应该是double*的数组)

答案 1 :(得分:2)

这是一个指向double的指针。或者指针数组加倍。或者,如果每个指针本身都分配数组,那么它可能是一个矩阵。

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

现在,如果out[0]分配如此:

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

或者像这样:

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

答案 2 :(得分:1)

实际上,写作

double*[] out;

在C / C ++中等于

double** out;

它表示要加倍的指针数组。或指向double的指针。因为数组只不过是一个指针。所以这本质上是一个二维数组。

你也可以写

double[][] out;

同样,添加另一个指针级别将为您的数组添加另一个维度。 所以

double ***weight;

实际上是指向三维数组的指针。

答案 3 :(得分:1)

基本上,两个代码片段都会分配指针数组。对于分配,它与什么无关。只有类型检查才需要正确的声明。 Square bracjets应该单独阅读,只表示它是数组。

请将以下代码视为快速示例:

#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。