代码之家  ›  专栏  ›  技术社区  ›  hiddensunset4

C++中的**是什么

  •  3
  • hiddensunset4  · 技术社区  · 14 年前

    我现在正在阅读一些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 回复  |  直到 12 年前
        1
  •  8
  •   Naveen    14 年前

    new double*[num] 是双指针数组,即数组的每个元素都是 double* . 您可以使用 out[i] = new double; 同样地 weight 是一个数组 double** . 您可以使用 新双精度*[数字] (如果它应该是 双* )

        2
  •  2
  •   Nikola Smiljanić    14 年前

    它是指向double的指针。或指向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
    
        3
  •  1
  •   nathanvda    14 年前

    实际上,写作

    double*[] out;
    

    在C/C++中等于

    double** out;
    

    它意味着一个指向double的指针数组。或指向双精度指针的指针。因为数组只是一个指针。所以这实际上是一个二维数组。

    你也可以写

    double[][] out;
    

    同样,添加另一个指针级别,也会向数组添加另一个维度。 所以

    double ***weight;
    

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

        4
  •  1
  •   Roman Nikitchenko    14 年前

    基本上,两个代码片段都分配指针数组。对于分配来说,什么并不重要。只有类型检查才需要正确的声明。方括号应单独读取,表示只有数组。

    请考虑以下代码作为快速示例:

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